我有如下代码扫描矩阵,w - 矩阵的宽度,h - 矩阵的高度。
我正在使用Visual Studio 2010。
每次我得到一个char它会使j增加2(我把断点加上来了解这个行为)。
int w = 0, h = 0;
char map[21][21];
int i,j;
scanf("%d%d", &w, &h);
for(i = 1; i <= h; ++i){
for(j = 1; j <= w; ++j){
//fflush(stdin);
scanf("%c",&map[i][j]);
//fflush(stdin);
}
}
这背后的原因是什么?
在扫描时我给出值,w = 7,h = 5.
我的代码中没有看到任何错误....请帮助我。
答案 0 :(得分:5)
问题是'\n'
遗留下来的scanf
个字符(在按下 Enter 时)。
消耗这些换行符的一种方法是在' '
之前%c
放置scanf
;
scanf(" %c",&map[i][j]);
^
|
space
另一种方法是使用循环来占用所有\n
getchar()
int ch;
while((ch=getchar())!='\n' && ch != EOF );
答案 1 :(得分:2)
您需要跳过之前scanf
请勿使用fflush(stdin)
使用:
int c;
while((c=getchar())!='\n' && c != EOF ); //eats newline came from scanf
scanf
致电后
答案 2 :(得分:0)
以下是 vuppala srikar 的答案。 他的问题&#34; fscanf issue while reading input from text file [duplicate]&#34;在我看来并不完全相同:
在他的问题中,scanf
是在打开的文本文件(fptr
)上完成的。
而不是:
while((fscanf(fptr,"%c %d",&c,&val))==2)
{
printf("%c %d\n",c,val);
}
只读取文件的第一行,我建议:
char line [50] ;
while (fgets( line,sizeof( line ),fptr ))
if (sscanf(line,"%c %d",&c,&val)==2)
{
printf("%c %d\n",c,val);
}
我希望我的回答不会太晚......