您的位置:首页 > 其它

scanf的正确使用及技巧

2016-07-14 14:17 267 查看
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

使用scanf函数时要加上#include <stdio.h>。

首先从键盘读入键盘缓冲区(buffer)的数据都是以ASCII码存储的(包括回车)。
例如:
#incude<stdio.h>
int main()
{
char a;
char b;
scanf("%c",&a);
scanf("%c",&b);
printf("%c%c",a,b);
return
0;
}
终端操作:w[回车]
w
显然这个程序只输入一次,输出一次。
第一次回车后,buffer中的ASCII:
XX,0AH(0A是换行的ASCII), scanf会根据格式字符串中的第一个%c从对buffer按字节顺序读取,因为‘\n’也是一个字符,所以当读取到0A时,会将字符‘\n’给变量b。读取数据结束,此时buffer中已经无任何数据了。

自然打印出来的就是w\n,两个字符。
解决办法是:

#incude<stdio.h>

int main()

{

char a;

char b;

scanf("%c",&a);

getchar();

scanf("%c",&b);

printf("%c%c",a,b);

return
0;

}

当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符,在输入w[回车]时,buffer中的ASCII:
XX,0AH(0A是换行的ASCII),getchar 开始读取字符,并显示在屏幕上,此时buffer中是没有数据,在这儿getchar()起到了清除缓冲区的作用,这样,当遇到达尔戈scanf 是,可以正常输入,并显示在屏幕上。

在scanf读取的一个参数是数时,开始输入的空白字符会被忽略,读取数字直到遇到第一字符不是数字就会停止;

读取字符串时,开始的空白字符也会被忽略掉,读取字符【0-9a-zA-Z....](各种可显示字符),直到遇到不是字符停止匹配,(包括空白字符,通常为回车换行),并且在字符串尾添加空字符,(空字符是字符串输出结束字符).

scanf遇到停止字符时,把停止字符还放入键盘字符缓存区中。

匹配格式

int a;

char x[20];

printf("Hello, world\n");

scanf("%d%s",&a,x);

printf("%d",a)

printf("%s",x);

getch();

如果输入.......123 .....hello[回车]

输出 hello,world

123hello
如果将输入改成scanf("%dabc%s",&a,x);
输入:....123abc.......hello
输出结果如上
输入:......123ab......hello
输出结果123字符数组输出为乱码。
建议:当此次输入结束时,不管正确与否,都要刷新缓存区,否则有滞留字符干扰下一次的输入,使用getchar().
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: