前面有过输入数据后,后面的scanf(" %c")需要加一个空格

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     /*
 5     int i;
 6     int j;
 7     printf("input number1:\n");
 8     scanf("%d",&i);
 9     printf("input number2:\n");
10     scanf("%d",&j);
11     printf("%d,%d",i,j);
12     */
13     char i;
14     char j;
15     printf("input char1:\n");
16     scanf("%c",&i);
17     printf("input char2:\n");
18     scanf(" %c",&j);
19     printf("%c,%c",i,j);
20     return 0;
21 }

为什么前面有过输入数据后,后面的scanf(" %c")需要加一个空格。
因为,前面输入的数据以回车结束,所以在键盘缓冲区中还存在着换行符\0,下一个scanf("%c")如果不加空格的话,则存储的是换行符\0;而写成scanf(" %c")在%c前加上一个空格,读取数据时就会自动跳过空白字符。
例子:scanf("%d", &a);
scanf("%c" &b);
pritnf("a = %d, b = %c",a, b);
输入:100
则直接输出了结果,没有等待输入b,输出结果显示为:a = 100, b =
将b的输出改为%d,发现b的输出为b = 10,即是\0所对应的十进制结果。
将%c改为 %c后,输入100,回车后则会等待输入b,再输入了b之后才输出了结果。
实际上,也可以使用在两个输入之间清空键盘缓冲区的方法。
在两个输入中间加上一句fflush(stdin);则输入100,回车后因为键盘缓冲区被清空了,没有数据存在,所以会等待输入b。

posted @ 2020-11-23 09:31  Connor_Jiao  阅读(733)  评论(0编辑  收藏  举报