scanf的异常行为

我有如下代码扫描矩阵,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。


我的代码中没有看到任何错误....请帮助我。


哆啦的时光机
浏览 466回答 3
3回答

蝴蝶刀刀

问题是由于留下的'\n'字符(按下 Enter )scanf。吃掉这些换行符的一种方法是' '先%c放入scanf;&nbsp;scanf(" %c",&map[i][j]);&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ^&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; space另一种方法是使用一个循环中的所有吃起来\n的getchar()&nbsp; int ch;&nbsp; while((ch=getchar())!='\n' && ch != EOF );

MM们

您需要跳过之前的尾随换行符 scanf不要用 fflush(stdin)采用:int c;while((c=getchar())!='\n' && c != EOF ); //eats newline came from scanfscanf电话结束后

慕莱坞森

这是对vuppala srikar的回答。他的问题“ 从文本文件[重复]读取输入时fscanf问题 ”在我看来并不完全相同:在他的问题中,这scanf是在一个打开的文本文件(fptr)上完成的。代替 :while((fscanf(fptr,"%c %d",&c,&val))==2){&nbsp; &nbsp; printf("%c %d\n",c,val);}它只读取文件的第一行,我建议:char line [50] ;while (fgets( line,sizeof( line ),fptr ))&nbsp; &nbsp; if (sscanf(line,"%c %d",&c,&val)==2)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; printf("%c %d\n",c,val);&nbsp; &nbsp; &nbsp; &nbsp; }我希望我的回答不会太晚......
打开App,查看更多内容
随时随地看视频慕课网APP