今天遇到一个小学弟开始学c语言,问了一道题。
用scanf函数输入数据,举例并分析错误原因
用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入。
#include<stdio.h>
int main()
{
int a, b;
float x, y;
char c1, c2;
scanf("a=%d b=%d",&a,&b);
scanf("%f %e",&x,&y);
scanf("%c%c", &c1, &c2);
return 0;
}
我上机运行了下:
在控制台输入了 3 7 8.5 71.82Aa
为什莫出错??????
最后看了看莫非scanf("a=%d b=%d",&a,&b);??????????????
百度下,
scanf("输入控制符非输入控制符", 输入参数);
这种用法几乎是不用的,也建议你们永远都不要用。但是经常有人问,为什么 printf 中可以有“非输出控制符”,而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要!下面来看一个程序:
# include <stdio.h>
int main(void)
{
int i;
scanf("i = %d", &i);
printf("i = %d\n", i);
return 0;
}
在 printf 中,所有的“非输出控制符”都要原样输出。同样,在 scanf 中,所有的“非输入控制符”都要原样输入。所以在输入的时候i=
必须要原样输入。比如要从键盘给变量 i 赋值 123,那么必须要输入i=123
才正确,少一个都不行,否则就是错误。
所以 scanf 中%d
后面也没有必要加\n
,因为在 scanf 中\n
不起换行的作用。它不但什么作用都没有,你还要原样将它输入一遍。
所以在 scanf 的使用中一定要记住:双引号内永远都不要加“非输入控制符”。除了“输入控制符”之外,什么都不要加,否则就是自找麻烦。而且对于用户而言,肯定是输入越简单越好。
所以正确输入为:
a=3 b=7
8.5 71.82Aa
测试一下下:
对于初学的同学详细解释一下:
- scanf是向键盘接受数据。
- 类似%d,%f它的作用是将输出的数据转换为指定的格式输出
- %d 整数,%f浮点数,%e指数形式,%c字符,
- 上面程序第3行scnaf接受两个字符,有同学敲下一个回车或空格,没输完,就输出了。是因为,系统认为回车或空格是一个字符就接受了,所以不能输入空格。但是第一个和第二个scanf接受的不是字符,系统接受时输入一个空格或是回车就会随自动过滤掉。所以输入是:
a=3 b=7
8.5 71.82Aa