前面有过输入数据后,后面的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。
YKJIAO