C语言格式输入函数,scanf()
函数是格式控制输入函数,scanf()
函数使用的一般格式为:
scanf("格式控制字符",输入项列表);
scanf()函数有“格式控制字符”,“输入项列表”两个参数,scanf()函数的功能是按照“格式控制字符”中规定的输入格式,从键盘上读取若干个数据,按“输入项列表”中变量从左向右的顺序,依次存入对应的变量中。
scanf()函数的格式控制字符基本上与printf()函数的格式控制相似,都是以 % 开始,以一个格式字符结束,格式控制的功能是规定输入数据的格式。
关于scanf()函数,做如下几点说明:
- 在scanf()函数中一个格式说明要求输入一个数据,就必须在地址列表中有一个变量的地址与之对应,并且类型要一致。例如:
scanf("%d%f",&a,&b);
其中,“%d”与
&a
对应,变量a的类型为整型,“%f”与&b
对应,变量b的类型为浮点型。 -
scanf()函数的输入项必须是一个“地址”,它可以是一个变量的地址,也可以是数组的首地址,但不能是变量名。
“&”是取地址符号,变量的地址必须写成“&变量名”。例如:scanf("%d,%d",&a,&b);
&a
、&b
分别表示变量a、b存储单元的地址。 -
scanf()
函数格式说明符与printf()函数相似,格式说明符与输入项列表一一对应。常用到的格式说明符有以下几种。- D:输入有符号的十进制整数;
- o:输入无符号的八进制整数;
- u:输入无符号的十进制整数;
- x或X:输入无符号的十六进制整数;
- c:输入单个字符;
- s:输入字符串;
- f:输入单精度或双精度数。
在使用scanf()函数时,普通字符和转义字符可不出现。
- 格式说明符中有普通字符或转义字符时,数据输入时,必须按它们的原样输入。例如:
int a,b; scanf("%d,%d",&a,&b);
在输入数据时,两个数据之间必须用“,”开隔。如:
4,6↙
才是正确的输入方式,表示将整数4存放在变量a所代表的存储空间内,将整数6存放在变量b所代表的存储空间内。又如:
int a,b; scanf("a=%d,b=%d",&a,&b);
正确的数据输入格式为:a=4,b=6↙
-
“格式控制字符”中如果没有任何普通字符,输入数据时,各个数据之间可以用空格、跳格键(Tab)或回车键作为间隔符。例如:
int a,b; scanf("%d%d",&a,&b);
可以有三种输入方式:
- 数据中间使用一个或多个空格
10 20↙ 10 20↙
- 数据中间按下跳格键(Tab)
10[Tab]20↙
- 数据中间按下回车键,即分行输入
10↙ 20↙
另外,上面几种方式可以混合使用。例如:
int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d);
输入时:
10 20↙ 30[Tab]40↙
- 可以指定输入数据所占的列数,系统自动按指定的列数截取所需的数据。
示例:#include <stdio.h> void main() /* 主函数*/ { int a, b; /*定义变量*/ scanf("%2d%3d", &a, &b); /*输入*/ printf("a=%d,b=%d ", a, b); /*输出*/ }
运行结果:
123456↙ a=12,b=345
- 输入数据时不能规定精度。例如:
scanf("%5.2f",&x);
这种输入格式是错误的。
-
scanf()函数在进行输入的时候是没有提示的。例如:
scanf("a=%d",&a);
在运行时,不会像printf()函数那样将“a=”原样显示。运行时应输入:a=10↙
scanf("%d,%d",&a,&b);
应输入:10,3↙
若需要提示时,可以用printf()函数输出字符串进行提示。示例:
#include <stdio.h> void main() { int x, y, max; /*定义所需变量*/ printf("请输入两个整数:\n"); /*输出提示文字*/ scanf("%d,%d", &x, &y); /*输入x和y的值*/ if (x > y) /*判断x和y的值*/ { max = x; } else { max = y; } printf("两个数中较大的数为:%d\n", max); /*将比较后的结果输出*/ }
运行结果:
请输入两个整数: 4,10↙ 两个数中较大的数为:10
- 如果输入的数据多于scanf()函数所要求的个数,余下的数据可以被下一个scanf()函数接着使用。
示例:#include <stdio.h> void main() { int a, b, c; /*定义所需变量*/ scanf("%d%d", &a, &b); /*首先输入a和b的值*/ scanf("%d", &c); /*然后输入c的值*/ printf("a=%d,b=%d,c=%d", a, b, c); /*将三者的数值输出*/ }
运行结果:
12 34 56 78↙ a=12,b=34,c=56
在上面的程序中出现两个scanf()输入函数,第一个scanf()只读入了前两个数据12和34,剩下的56将被下一个scanf()函数所用。
-
在scanf()函数中某格式字符读入数据时,遇以下情况时认为该数据结束:
- 遇“数据分隔符”,如空格、回车、tab或指定字符。
- 遇宽度结束,如“%3d”,只取3列后读取结束。
- 遇非法输入。
示例:
#include <stdio.h> void main() { int a, b; scanf("%d%d", &a, &b); printf("a=%d,b=%d", a, b); }
运行结果为:
123.45 678↙ a=123,b=-858993460
程序运行时,将123送a,而b没有被赋值,因为整型数据中不能出现小数点,但b=-858993460,是因为在对变量进行定义而不初始化时,系统会为变量分配一个随机值。
-
需要注意的是,在使用格式说明符%c输入一个字符时,凡是从键盘输入的字符,包括空格、回车等都被作为有效字符接收。
示例:
#include <stdio.h> void main() { char ch1, ch2, ch3; scanf("%c%c%c", &ch1, &ch2, &ch3); printf("ch1=%c,ch2=%c,ch3=%c", ch1, ch2, ch3); }
运行结果为:
A B C ch1=A,ch2= ,ch3=B
此时字符’A’存入ch1所代表的存储单元,’□’(空格)作为字符存入ch2代表的存储单元,字符’B’存入ch3代表的存储单元。
-
如果在%后面有个“*” 附加说明符,表示跳过它指定的列数。
示例:#include <stdio.h> void main() { int a, b; scanf("%2d %*3d %2d", &a, &b); printf("a=%d,b=%d", a, b); }
运行结果为:
12345 67↙ a=12,b=67
酷客网(coolcou.com) – 专注IT精品教程和实例
评论前必须登录!
注册