在C语言中,scanf函数用来接收数据 . 但是,当执行scanf函数时候,并不是直接让用户从键盘输入 , 而是先检查缓冲区中是否有数据 , 如若没有数据 , 才会让用户从键盘输入.
当用户输入数据的时候,输入的数据并不是直接赋给scanf指定的变量,而是先存储到我们的缓冲区,scanf函数再从缓冲区取数据 . 如果取出的数字 , 整数或者小数 , 缓存区的空格 , tab , 回车就会自动被忽略 , 如果要拿的是一个char数据 , 那么任何数据都不会忽略 ! 这时如果缓冲区中有数据 , 而用户要接收一个char类型的数据 , 它就可能不让用户输入 .
解决方案 :
在输入字符之前,将缓冲区中的数据全部清空
rewind (stdin) ;
例 :
- 让用户输入一个整数.
int num = 0;
printf("请输入第一个数 : ");
scanf("%d" , &num);
printf("num = %d\n",num);
- 让用户再输入一个字符.
char ch = '\0';
printf("请输入一个字符: ");
rewind(stdin); //这句代码的作用是将缓冲区中的数据全部清空.
scanf("%c",&ch);
printf("ch=%c",ch);