有错误大家多指点,大家共同努力。
C语言中输入函数scanf使用不当,会出现各种错误,正确使用,会提孕驷巴墟高效率,现把一些注意事项,正确的使用方法和经验分享给大家.
在C语言中空白字符括:空格、换行()、回车()、水平制表符( )、换页符()、垂直制表符()。在scanf读取的一个参数是数时,开始输入的空白字符会被忽略,读取数字直到遇到第一字符不是数字就会停止;读取字符串时,开始的空白字符也会被忽略掉,读取字符【0-9a-zA-Z....](各种可显示字符),直到遇到不是字符停止匹配,(包括空白字符,通常为回车换行),并且在字符串尾添加空字符,(空字符是字符串输出结束字符).scanf遇到停止字符时,把停止字符还放入键盘字符缓存区中。举例如下:
#include "stdio.h"
#include "conio.h"
main()
{
int a;
char x[20];
printf("Hello, world");
scanf("%d%s",&a,x);【1】
printf("%s",x);
getch();
}
如果输入.......123.......hello...(.为空白字符)
那么结果:a = 123 x[20] = "hello" x[5]=空字符
如果在格式字符串中包含空白字符时,一个或多个连续空白字符贪婪匹配空白字符直到遇到第一个不是空白字符;格式字符串中包含可显字符时,那么精确匹配。如果不匹配,把第一个不匹配的字符放入输入流中,异常退出。例如:
把上面的【1】改为scanf("%dabc%s",&a,x);
输入.......123abc.......hello...(.为空白字符),结果同上。如果输入了
.......123ab.......hello...(.为空白字符) 那么结果:a=123,字符数组是乱码。
还有一种情况:当此次输入结束时,不管正确与否,都要刷新缓存区,否则有滞留字符干扰下一次的输入。fflush(stdin);rewind(stdin);都可以清空输入流缓存区。希望大家多做实验,这样经验多一点,出错的机率就小一点。谢谢大家!