关于C语言中输入字符的问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 02:58:48
举个简单的例子:
#include "stdio.h"
void main()
{
int a;
char c;
printf("请输入年龄:");
scanf("%d",&a);
printf("请输入性别:");
scanf("%c",&c);
……
}
问题就出在scanf("%c",&c)上
我知道前面可以用一个getchar()把回车吃掉,但如果在%c前面加一个空格也可以避免这个错误,谁知道加这个空格的原理是什么吗?
求解,感谢ing……

scanf("<格式化字符串>",<地址表>);
格式化字符串有三种类型:
1)格式化说明符,%c,%d...
2、 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
3、 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

所以呢,在%c的前面必须有一个空格,否则系统会将你前面输入别的值之后键入的回车符读入该变量,造成死循环。当然,如果scanf("%c",&varname)是第一条读入语句,就可以不需要空格。

换行的Enter背识别为Space...填充了。
还可以用清空缓冲的方法。

一个中文字是两个字节哦呵呵,也就是16位,而char的类型是8位