#7865: scanf(" %c",&pic[i][j]);跟scanf("%c",&pic[i][j]);不一樣??(後面的%c少一個空白)


hchs9910739 (噢噢噢啦啦啦)

學校 : 國立清華大學
編號 : 15048
來源 : [118.166.220.35]
最後登入時間 :
2020-10-06 23:14:54
d626. 小畫家真好用 -- jack1 | From: [118.169.83.130] | 發表日期 : 2013-06-20 10:14

#include<stdio.h>
#include<stdlib.h>
int n;
char pic[101][101]={0};
void map(int a,int b)
{
if(a<1||b<1||a>n||b>n)return;
if(pic[a][b]=='+')return;
pic[a][b]='+';
map(a+1,b);
map(a,b+1);
map(a-1,b);
map(a,b-1);
}
int main(){
int a,b,z=0;
while(scanf("%d",&n)!=EOF)
{
for(int i=1 ;i<=n ;i++)
{
for(int j=1 ;j<=n ;j++)
{
scanf(" %c",&pic[i][j]); → 如果改成這樣scanf("%c",&pic[i][j]);少一個空格,輸入就有問題了 
}
}
scanf("%d %d",&a,&b);
a++;
b++;
map(a,b);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%c",pic[i][j]);
}
printf("\n");
}
}
return 0;
}
 
有誰可以幫我解答嗎??
謝謝^^ 
 
#7869: Re:scanf(


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
d626. 小畫家真好用 -- jack1 | From: [203.70.194.240] | 發表日期 : 2013-06-24 11:09

#include
#include
int n;
char pic[101][101]={0};
void map(int a,int b)
{
if(a<1||b<1||a>n||b>n)return;
if(pic[a][b]=='+')return;
pic[a][b]='+';
map(a+1,b);
map(a,b+1);
map(a-1,b);
map(a,b-1);
}
int main(){
int a,b,z=0;
while(scanf("%d",&n)!=EOF)
{
for(int i=1 ;i<=n ;i++)
{
for(int j=1 ;j<=n ;j++)
{
scanf(" %c",&pic[i][j]); → 如果改成這樣scanf("%c",&pic[i][j]);少一個空格,輸入就有問題了 
}
}
scanf("%d %d",&a,&b);
a++;
b++;
map(a,b);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%c",pic[i][j]);
}
printf("\n");
}
}
return 0;
}
 
有誰可以幫我解答嗎??
謝謝^^ 



輸入是連續的字元可以用 scanf("%s",pic[i]) 一次讀取一整行,for(j... 可以不用

字串要多預留一個位置放 '\0'

 
#7870: Re:scanf(


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
d626. 小畫家真好用 -- jack1 | From: [203.70.194.240] | 發表日期 : 2013-06-24 11:19

#include
#include
int n;
char pic[101][101]={0};
void map(int a,int b)
{
if(a<1||b<1||a>n||b>n)return;
if(pic[a][b]=='+')return;
pic[a][b]='+';
map(a+1,b);
map(a,b+1);
map(a-1,b);
map(a,b-1);
}
int main(){
int a,b,z=0;
while(scanf("%d",&n)!=EOF)
{
for(int i=1 ;i<=n ;i++)
{
for(int j=1 ;j<=n ;j++)
{
scanf(" %c",&pic[i][j]); → 如果改成這樣scanf("%c",&pic[i][j]);少一個空格,輸入就有問題了 
}
}
scanf("%d %d",&a,&b);
a++;
b++;
map(a,b);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%c",pic[i][j]);
}
printf("\n");
}
}
return 0;
}
 
有誰可以幫我解答嗎??
謝謝^^ 



輸入是連續的字元可以用 scanf("%s",pic[i]) 一次讀取一整行,for(j... 可以不用

字串要多預留一個位置放 '\0'


另外,題目輸入範例是從0開始,所以i和j才多+1

0  1  2

1

2

你的程式從1開始,而a和b 又有+1,會還錯位置

 
ZeroJudge Forum