scanf() 嵌套在while语句中,结果死循环了

#include <stdio.h>
int main(void)
{
int a,b;
while( scanf("%d",&a) != 1)
{
printf("错误\n");

scanf("%d",&a);
}
printf("\n%d",a);
}

我的目的是判断输入的是不是整形,如果是则跳过,如果不是整形,就报错并从新输入,结果我在控制台输入了一个字符之后就死循环了

当scanf要读取int型,却读取到字符输入时,字符会继续留在缓冲区中。

所以这里要增加一个清除缓冲的调用

fflush 是一个比较常用的方法,不过有些平台会不支持。

所以更常用的是通过getchar手动清楚一行输入

#include <stdio.h>
int main(void)
{
int a,b;
while( scanf("%d",&a) != 1)
{
printf("错误\n");
while(getchar()!='\n'); //读取字符 åˆ°æ¢è¡Œä¸ºæ­¢ã€‚
scanf("%d",&a);
}
printf("\n%d",a);
}
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

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