该程序不会在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