C scanf不按格式输入的后果

来源:百度知道 编辑:UC知道 时间:2024/05/24 15:56:49
int a;
while(1)
{
if(scanf("%d",&a)==1)
printf("hhhhh");
}
如果我的标准输入不是数字而是一些字符串,回车之后就再也不能输入了,这是为什么啊?

scanf 返回成功读入的个数 ,如果读入整数过程中遇到字符 ,scanf 并不会处理这个字符 ,下次执行 scanf 会遇到同样的字符 ,你这输入字符以后 scanf 返回值为 0 ,陷入死循环 ,而且输入的字符无法得到处理,当然不能再输入

因为你这个while(1)是个死循环
而scanf("%d",&a)==1的意义你一定理解错了

估计你想的是如果赋给a的值是1吧
但是scanf的返回值不是这样定义的
可以查以下MSDN
我印象中是如果scanf中输入的是符合格式的即返回1
否则返回0
比如你这里的输入就是不符合格式的
要求输入的是%d
而你输入的是%s
所以返回值是0 这样你的if表达式不成立
也就不回printf
所以就会什么都不显示 停留在死循环了

if(scanf("%d",&a)==1) 是错误的吧

应该

scanf("%d",&a)
if(a==1)
。。。。。。。

buffer溢出,导致程序错误了吧。。