首页 > 编程笔记 > C语言笔记 阅读:75

C语言scanf()函数的用法(非常详细)

在 C语言中,scanf() 函数的功能是指定固定的格式,并且按照指定的格式接收用户通过键盘输入的数据,最后将数据存储在指定的变量中。

C语言scanf()的一般形式

scanf() 函数是用来按照指定格式从输入设备输入数据的,它的一般形式如下:
scanf(格式控制,地址列表);
下面介绍 scanf() 函数里的参数。
1) 格式控制:用来指定每个输入项的输入格式,格式控制通常由多个格式说明组成,都由“%”开头,后面跟格式字符,例如 %d、%c 等。

格式说明的个数和地址列表中的数据个数要相对应。

2) 地址列表:是需要读入变量的地址或者字符串的首地址,而不是读入变量本身。用“&”符号表示取变量的地址,不用关心变量的地址具体是多少,只要在变量的标识符前加“&”,就表示取变量的地址。

编写程序时,在 scanf() 函数参数的地址列表处一定要使用变量的地址,而不是使用变量的标识符,否则编译器会提示出现错误。

例如:
int a; //定义整型变量
scanf("%d",&a); //输入a的值

再如:
int a,b; //定义整型变量
scanf("%d,%d",&a,&b); //输入a、b的值
上面这段代码中,两个 %d 之间有一个逗号,在运行程序时,输入 a、b 的值,它们中间也需要用逗号,再按<Enter>键完成输入。输入示例如下:

13,14


再如:
int a,b; //定义整型变量
scanf("a=%d,b=%d",&a,&b); //输入a、b的值
输入示例如下:

a=13,b=14

也就是说,格式控制之间用什么符号,在输入设备上就输入对应的符号。

C语言scanf()的格式字符

格式字符用在 scanf() 函数的格式控制中,一般形式如下:
%格式字符
有以下几点说明:
scanf() 函数常用的格式字符如下表所示:

表 1 scanf()函数常用的格式字符
格式字符 功能说明
d、i 用来输入有符号的十进制整数
u 用来输入无符号的十进制整数
o 用来输入无符号的八进制整数
x、X 用来输入无符号的十六进制整数(大小写形式的作用是相同的)
c 用来输入单个字符
s 用来输入字符串
f 用来输入浮点数,可以用小数形式或指数形式输入
e、E、g、G 与f作用相同,e与f、g可以相互替换(大小写形式的作用是相同的)

格式字符 %s 用来输入字符串。将字符串输入一个字符数组,在输入时以非空白字符开始,以第一个空白字符结束。字符串以 \0 作为最后一个字符。

下面分别对格式字符进行举例说明。

1) d、i 格式字符:用来输入有符号的十进制整数。例如:
int a; //整型变量
scanf("%d", &a); //用格式字符d输入
scanf("%i", &a); //用格式字符i输入

2) u 格式字符:用来输入无符号的十进制整数。例如:
int a=1; //整型变量
scanf("%u", &a); //用格式字符u输入

3) o 格式字符:用来输入无符号的八进制整数。例如:
int a; //整型变量
scanf("%o", &a); //用格式字符o输入

4) x、X 格式字符:用来输入无符号的十六进制整数(大小写形式的作用是相同的)。例如:
int a ; //整型变量
scanf("%x",& a); //用格式字符x输入
scanf("%X", &a); //用格式字符X输入

5) c 格式字符:用来输入单个字符。例如:
char a; //字符型变量
scanf("%c", &a); //用格式字符c输入

6) s 格式字符:用来输入字符串。例如:
char *a; //利用指针定义字符串变量
scanf("%s", &a); //用格式字符s输入

7) f 格式字符:用来输入浮点数,可以用小数形式或指数形式输入。例如:
float a; //浮点型变量
scanf("%f", &a); //用格式字符f输入

8) e、E、g、G 格式字符:与f作用相同,e与f、g可以相互替换(大小写形式的作用是相同的)。例如:
float a; //浮点型变量
scanf("%e", &a); //用格式字符e输入
scanf("%E", &a); //用格式字符E输入
scanf ("%g", &a); //用格式字符g输入
scanf ("%G",& a); //用格式字符G输入

【实例】使用 scanf() 函数输入半径,计算对应圆的周长和对应球的体积。
#include<stdio.h>

int main()
{
     float Pie = 3.14f; /*定义圆周率*/
     float fArea; /*定义变量*/
     float fRadius;
     puts("Enter the radius:");
     scanf("%f", &fRadius); /*输入半径*/
     fArea = 2 * fRadius * Pie; /*计算圆周长*/
     printf("The perimeter is: %.2f\n", fArea); /*输出计算的结果*/
     fArea = 4 / 3 * (fRadius * fRadius * fRadius * Pie);/*计算球体积*/
     printf("The volume is: %.2f\n", fArea); /*输出计算的结果*/
     return 0; /*程序结束*/
}
运行程序,结果为:

Enter the radius:
2.5
The perimeter is: 15.70
The volume is: 49.06

从该实例代码和运行结果可以看出以下内容:
1) 为了能接收用户输入的数据,程序代码中定义了一个变量 fRadius。因为 scanf() 函数只能接收用户的数据,而不能输出信息,所以先使用 puts() 函数输出一段字符表示信息提示。

2) 调用 scanf() 函数,从函数参数中可以看到,在格式控制的位置使用双引号对格式字符进行标识,“%f”表示输入的是浮点型数据。在参数中的地址列表位置使用“&”符号表示变量的地址。此时变量 fRadius 已经得到了用户输入的数据。

3) 利用表达式计算圆的周长和球的体积,调用 printf() 函数对变量进行输出。

scanf()的附加格式字符

在格式说明中,“%”符号和格式字符间可以插入几种附加符号(即附加格式字符),一般形式如下:
% 附加格式字符 格式字符
有以下几点说明。
scanf() 函数的附加格式字符如下表所示。

表 2 scanf() 函数的附加格式字符
格式字符 功能说明
l 用于长整型数据,可加在格式字符 d、o、x、u、f 前面
h 用于短整型整数,可加在格式字符 d、o、x、u、f 前面

1) l 附加格式字符。:用于长整型数据,可加在格式字符 d、o、x、u、f 前面。例如:
long a; //定义长整型变量
double b; //定义双精度浮点型变量
scanf("%ld %lf", &a,&b); //用附加格式字符l修饰d、f,并输入

2) h 附加格式字符:用于短整型整数,可加在格式字符 d、o、x、u、f 前面。例如:
short a; //定义短整型变量
scanf("%hd", &a); //用附加格式字符h修饰d,并输入

scanf()的数值和字符混合输入

有时候程序不单会让用户输入一个数据,还可能会让用户输入多个数据,且类型不同,我们通过一个例子来说明。

【实例】输入字母和对应的 ASCII 值。
#define _CRT_SECURE_NO_WARNINGS /*解除vs安全性检测问题*/
#include<stdio.h>
int main()
{
   int num; //定义整型变量
   char c; //定义字符型变量
   printf("请输入字母和对应的ACSII值:\n"); //输出提示信息
   scanf("%c %d",&c,&num); //输入字母和数值
   printf("输入的字母是%c,它对应的ASCII值是:%d\n",c,num); //输出信息
   return 0; //程序结束
}
运行结果为:

请输入字母和对应的ACSII值:
c 99
输入的字母是c,它对应的ASCII值是:99

相关文章