这段程序是,阻塞,然后等待你输入一个整数,然后原样输出,然后再阻塞,如此循环。(编译器:VS2005)#include<stdio.h>int main(){ int i; while(1)
{ puts("请输入数字"); scanf("%d", &i); printf("以整数输出这个值:%d\n", i);
}
}但实际上如果输入的字母,再循环回来的时候就不会阻塞,而是会疯狂的循环下去……百度一下,发现scanf函数会从输入缓存(不太懂这是什么东西)中拿走一段数据,如果我输入的是数字的话这个操作就会清空输入缓存,当再次运行scanf函数的时候如果输入缓存是空的,就会产生一个阻塞。然而还是不明白输入字母的情况下发生了什么。
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
好吧,最后还是自己找到了答案……
scanf还有一个特点就是:输入缓存中的字符无法匹配格式化说明符的时候,会立即return掉,该缓存字符也不会被删除。
然后配合上面说的特点:只有输入缓存是空的的时候,才会阻塞,否则不会阻塞。
- 1 回答
- 0 关注
- 480 浏览
添加回答
举报
0/150
提交
取消