代码:目标是想要获取一个数字,运行时输入了一个非数字字母
#include <stdio.h>
int main(int argc, char const *argv[])
{
int get1;
while(1){
scanf("%d",&get1);
printf("*%d*\n",get1);
//while('\n' != getchar());
}
return 0;
}
导致无线循环打印
原因分析:
scanf需要获取一个数字,但是你给了一个字母,scanf获取之后发现不是我要的,就把字母又放回了缓冲,但是由于缓冲不是空的,scanf不会进入阻塞状态(就是等待用户输入)。在下一次循环时,发现缓冲有东西(其实还是上次放回的字母),再取,再放回,我还是不阻塞,执行下一条语句,如此循环,导致一直打印。