scanf函数,与printf函数一样,都被定义在stdio.h里,它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。
关于scanf的注意:
scanf("%d _ %d",&a,&b)
scanf("%d%d",&a,&b) _表示空格,在输入时,要按照格式输入 ,在两种格式一样,输入的时候要加空格,不如3_4;
scanf("%d,%d",&a,&b)再输入时要加‘,’,比如3,4
键盘缓冲区残余信息问题
#include
int main()
{
int a;
char c;
do{
scanf("%d",&a);
scanf("%c",&c);
printf("a=%d c=%c\n",a,c);
/*printf("c=%d\n",c);*/
}while(c!='N');
}
scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d\n",c);将C用int表示出来,启用printf("c=%d\n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.
实际例程
1) "%d%d%d"是按十进值格式输入三个数值。
输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。一定要跟在数字后面
2) 在用"%c"输入时,空格和“转义字符”均作为有效字符。
3) scanf()函数不能正确接受有空格的字符串?
如: I love you!
#include
int main()
{
char str[80];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:I love you!
输出:I
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".