C语言中scanf()输入与占位符不匹配的数据
在C语言中使用scanf()函数来获取输入数据的时候如果输入数据与占位符不匹配则会导致之后的scanf()函数都无法正常执行,如
int main()
{
int a;
do
{
scanf("%d",&a);
printf("a = %d",a);
}while(1)
return 0;
}
执行上述代码,如果在控制台输入字母a,则程序会进入死循环而不会让再次让你输入新数据。
解决方法:
用while (getchar() != '\n')
来清空输入队列即可,如下:
int main()
{
printf("Hello, World!\n");
int a;
do
{
scanf("%d",&a);
while (getchar() != '\n');
printf("a = %d\n",a);
}while(1);
return 0;
}
必要的时候可以定义一个宏:
#define FLUSH while (getchar() != '\n')
另外,fflush(stdin)可能也可以达到这个效果,但是这并非标准用法,在C标准中,fflush()只用于输出流。