前面有过输入数据后,后面的scanf(" %c")需要加一个空格
1 #include
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。