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。