问题举例:
#include "stdio.h"
void main()
{
int a;
char c;
printf("请输入年龄:");
scanf("%d",&a);
printf("请输入性别:");
scanf("%c",&c);
……
}
问题就出在scanf("%c",&c)上
我知道前面可以用一个getchar()把回车吃掉,但如果在%c前面加一个空格也可以避免这个错误.。
原因:
scanf("<格式化字符串>",<地址表>);
格式化字符串有三种类型:
1)格式化说明符,%c,%d...
2、 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
3、 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
所以呢,在%c的前面必须有一个空格,否则系统会将你前面输入别的值之后键入的回车符读入该变量,造成死循环。当然,如果scanf("%c",&varname)是第一条读入语句,就可以不需要空格。