最近在Linux终端写代码时,使用scanf输入一个字符,当不小心输入了一个退格键或者方向键时,程序就出现无限读取的现象,这显然是scanf的缓冲区内的字符无法刷新出去,即研究一下scanf缓冲区的刷新规则。
scanf缓冲区的刷新规则
当scanf从缓冲区读取走需要的数据之后,缓冲区应该会被清空,但在某些情况下,缓冲区并不会会清空,使用下面的代码检测一下什么情况下缓冲区不会被清空:
输入数字
#include <stdio.h>
int main()
{
int num = 0;
while(1)
{
scanf("%d", &num);
printf("%d\n", num);
}
return 0;
}
[ahao@AHAOAHA test]$ ./test
1 #输入1
1 #输出1
^C
[ahao@AHAOAHA test]$ ./test
w #输入字符w
1
1
1
1