C 程序设计教程(10)—— 数据输入函数(scanf)用法详解
该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。
目录
- C 程序设计教程(10)—— 数据输入函数(scanf)用法详解
- 一、scanf 函数的格式
- 二、格式字符
- 三、scanf 函数的使用要点
scanf 函数称为格式输入函数,用 scanf 函数可以从键盘输入任何类型的数据。
一、scanf 函数的格式
scanf 函数是一个标准的格式输入函数,该函数原型包含在标准输入输出头文件 stdio.h 中。scanf 函数的格式如下:
scanf("格式控制字符串",地址列表);
说明:
(1)格式控制字符串的含义与 printf 函数相同。
(2)地址列表是由若干个地址组成的序列,可以是变量的地址或字符串的首地址等。
普通变量的地址由 & 运算符来实现,格式为:
&变量名
例如:
#include<stdio.h>
int main() {
int a,b,c;
float f1,f2,m;
scanf("%d%d",&a,&b); //输入a和b的值时用空格隔开
c=a+b;
scanf("%f,%f",&f1,&f2);//输入f1和f2的值时用逗号(,)隔开
m=f1+f2;
printf("c=%d\n",c);
printf("m=%f\n",m);
return 0;
}
以上程序的运行结果如下:
二、格式字符
scanf 函数的格式控制字符串也是以 % 开始,以一个格式字符结束,中间可以插入附加的格式说明符。scanf 函数用到的格式字符如下表所示:
格式字符 | 说明 |
---|---|
d | 用来输入十进制整数 |
o | 用来输入八进制整数 |
x | 用来输入十六进制整数 |
c | 用来输入单个字符 |
s | 用来输入字符串,将字符串送到一个字符数组中,在输入时以非空字符开始,以第一个空白字符结束。字符串以串结束标志 \0 作为其最后一个字符。 |
f | 用来输入实数,可以用小数形式或指数形式输入 |
e | 与 f 作用相同,e 与 f 可以替换 |
scanf 函数附加的格式说明字符如下表所示:
字符 | 说明 |
---|---|
l | 用于输入长整型数据(可以用 %ld、%lo、%lx),以及 double 型数据(用 %lf 或 %le) |
h | 用于输入短整型数据(可以用 %hd、%h0、%hx) |
m | 指定输入数据所占宽度(列数),遇空格或不可转换字符则输入结束 |
* | 表示本输入项在读入后不赋给相应的变量 |
说明:
(1)可以指定输入数据所占列数,系统自动按指定的列数截取所需数据。
例如:
#include<stdio.h>
int main() {
int a,b;
char ch1,ch2;
scanf("%3d%3d",&a,&b);
scanf("%3c%3c",&ch1,&ch2);
printf("a=%d,b=%d\n",a,b);
printf("ch1=%c,ch2=%c\n",ch1,ch2);
return 0;
}
以上程序的运行结果如下:
(2)% 后的 * 附加说明符,用来表示跳过它相对应的数据。例如:
#include<stdio.h>
int main() {
int a,b;
scanf("%d %*d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
以上程序的运行结果如下:
三、scanf 函数的使用要点
1、scanf 函数中格式控制字符串后面不是变量名,是变量地址,即:&变量名。但在使用 s 格式输入字符数组时,变量名本身就是字符串的首地址,不需要加地址运算符 &。例如:
#include<stdio.h>
int main() {
int a;
char str[6];
scanf("%d",&a);
scanf("%s",str);
printf("a:%d\n",a);
printf("str:%s",str);
return 0;
}
以上程序的运行结果如下:
2、scanf 函数没有计算功能,因此输入的数据只能是常量,不能是表达式。
3、输入数据时,数据与数据之间应使用分隔符。分隔符有两种,一种是在输入格式控制字符串中给定的。另一种是空格、Enter 键或制表符(Tab)。
例如:
#include<stdio.h>
int main() {
int a,b,c,d,e,f,g,h;
scanf("%d,%d",&a,&b); //输入时用逗号(,)分隔
scanf("%d%d",&c,&d); //输入时用空格分隔
scanf("%d%d",&e,&f); //输入时用回车分隔
scanf("%d%d",&g,&h); //输入时用tab键分隔
printf("a=%d,b=%d\n",a,b);
printf("a=%d,b=%d\n",c,d);
printf("a=%d,b=%d\n",e,f);
printf("a=%d,b=%d\n",g,h);
return 0;
}
以上程序的运行结果如下:
4、输入格式中,除了格式说明之外的普通字符需要原样输入。例如:
#include<stdio.h>
int main() {
int x,y;
scanf("x=%d,y=%d",&x,&y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
以上程序的运行结果如下:
5、输入实型数据时,不允许指定精度。
6、输入数据时,如果遇到以下情况,则认为该数据输入结束。
(1)遇到空格、换行符或制表符(Tab)
(2)达到指定的宽度输入结束。例如:
#include<stdio.h>
int main() {
int x;
scanf("%2d",&x);
printf("x=%d\n",x);
return 0;
}
以上程序的运行结果如下:
(3)遇到非法字符输入结束。例如:
#include<stdio.h>
int main() {
int x;
char ch;
float f1;
scanf("%d%c%f",&x,&ch,&f1);
printf("x=%d,ch=%c,f1=%f\n",x,ch,f1);
return 0;
}
以上程序的运行结果如下: