scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可是在使用的时候,还是会遇到很多意想不到的问题,汇总见到的2种情况。
1. 读取多余的字符
例:
#include <stdio.h>
int main()
{
char a;
while(1)
{
printf("Hello,World!\n");
scanf("%c",&a);
printf("getchar: %d\n", (int)a);
}
return 0;
}
运行结果:
原因:键盘输入的信息首先保存在数据缓冲区,scanf是从缓冲区中读取键盘输入的信息然后到内存,所以,当输入abcd后回车,然后连续会输出5个字符。当输入a是连续输出2个字符。
解决办法:
方法(1)就是在scanf("%c",a);后加一句getchar();
方法(2)在scanf("%c",a);后加一句fflush(stdin);清除缓冲区。
2. 空白符问题
例:
#include<stdio.h>
main()
{
int a;
printf("input the data\n");
scanf("%d ",&a);
printf("%d",a);
return 0;
}
例子是scanf("%d ",&a);%d后有空格,所以再输入的时候,输入一个数字后再输入无论多少个空格和回车键都没有结果,这时需要再输入一个字符,回车才能输出结果。这是因为用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。这里的空白符包括空格,制表符,换行符,回车符和换页符。
解决方法:输入的时候要注意。
暂时只有这两种情况了,