#include <stdio.h>int main( void ){int i=1;while(i) {printf("Please input an integer: ");scanf("%d", &i);printf("%d\n", i);}return 0;}上面的程序是循环地让用户每次都输入一个整数的,一旦用户输入了错误的数据,比如字母,就会进入死循环。我知道是因为字母被留在了缓冲区,scanf就不会等待用户输入而直接去读取缓冲区的数据,但是无法读到正确的数据,字母还在缓冲区,所以死循环了。这时候加上fflush(stdin);可以解决这个问题我的问题是,如果我输入的是正确的数据,比如整数“2”,这时候2是被留在了缓冲区,那么第二次scanf不是应该不等待我输入而又去读取缓冲区中的"2"了吗?简言之,因为scanf没有清除数据的功能,而是直接读,那么上一次就算我输入了正确的数据类型,下一次的循环时scanf不是也会继续去读上一次留在缓冲区的数据了吗?
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消