c语言while循环和SCANF问题

int main()
{
int a, b;
while(scanf("%d",&a)==1)
{
printf("ok1!\n");
while (scanf("%d", &b) == 1)
{
printf("ok2!\n");
}
printf("ok3!\n");

}

return 0;
}
这个程序,第二个循环,如果输入的是字母,不应该只跳出第二个循环吗?为什么在第二个循环中输入字母,整个程序都结束了?

在第二个循环输入字母 导致第二个循环获取出错

但这个字母 并不会被第二循环的scanf读取

所以 到第一循环 也就是外循环 还是会读到这个字母的。 

解决方法 就是在出错的时候,把出错字母读走。 或者干脆读走一行。 

int main()

int a, b;
while(scanf("%d",&a)==1)
{
printf("ok1!\n");
while (scanf("%d", &b) == 1)
{
printf("ok2!\n");
}
getchar();//读走出错字母。 或者读一行,改成while(getchar()!='\n');
printf("ok3!\n");

}

return 0;
}追问

老师,如果我在第二个循环后面清除输入缓冲区,这样为什么不行,按照我的理解是,如果scanf输入错误,这个字母会被保留,直到下一个scanf出现再判断,但是如果是保留到缓冲区,为什么清除缓冲区里的字母会没用呢?

追答

清除缓冲区应该是可以的
不过如果用fflush的话,不是每个平台都能很好支持
最稳妥的还是自己getchar

追问

谢谢您,我用的VS2015,我也不知道怎么回事,getchar();是有效的,可是fflush(stdin);却没用,不过问题是解决了

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网