C 程序设计教程(10)—— 数据输入函数(scanf)用法详解

在这里插入图片描述

该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。

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;
}

以上程序的运行结果如下:

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐