该程序不会在scanf(“%c”,&ch)行停止,为什么?

该程序不会停止在scanf(“%c”,&ch)行上。 为什么会发生sombody可以请解释给我

#include<stdlib.h> #include<stdio.h> struct list { char val; struct list * next; }; typedef struct list item; void main() { char ch; int num; printf("Enter [1] if you want to use linked list or [2] for realloc\n"); scanf("%d", &num); if(num == 2) { scanf("%c", &ch); printf("%c", ch); } } 

假设你在读取num时input2。 实际的inputstream将是2 \ n(\ n是换行符)。 2进入数字,并保持\ n,这将进入通道。 为了避免这种情况,请在格式说明符中添加一个空格。

 scanf(" %c", &ch); 

这将忽略任何空格,换行符或制表符。

其原因是前面的scanf留下的换行符,当按下Enter键时,用于scanf的下一次读取。 当声明

 scanf("%c", &ch); 

执行的时候会看到前面的scanf留下的\n
要吃掉这个\n你可以在%c说明符之前使用空格。 %c说明符之前的空格可以占用任意数量的空格字符。

 scanf(" %c", &ch); ^ a space