C语言scanf()函数的用法(非常详细)
在 C语言中,scanf() 函数的功能是指定固定的格式,并且按照指定的格式接收用户通过键盘输入的数据,最后将数据存储在指定的变量中。
1) 格式控制:用来指定每个输入项的输入格式,格式控制通常由多个格式说明组成,都由“%”开头,后面跟格式字符,例如 %d、%c 等。
编写程序时,在 scanf() 函数参数的地址列表处一定要使用变量的地址,而不是使用变量的标识符,否则编译器会提示出现错误。
例如:
再如:
再如:
scanf() 函数常用的格式字符如下表所示:
格式字符 %s 用来输入字符串。将字符串输入一个字符数组,在输入时以非空白字符开始,以第一个空白字符结束。字符串以 \0 作为最后一个字符。
下面分别对格式字符进行举例说明。
1) d、i 格式字符:用来输入有符号的十进制整数。例如:
2) u 格式字符:用来输入无符号的十进制整数。例如:
3) o 格式字符:用来输入无符号的八进制整数。例如:
4) x、X 格式字符:用来输入无符号的十六进制整数(大小写形式的作用是相同的)。例如:
5) c 格式字符:用来输入单个字符。例如:
6) s 格式字符:用来输入字符串。例如:
7) f 格式字符:用来输入浮点数,可以用小数形式或指数形式输入。例如:
8) e、E、g、G 格式字符:与f作用相同,e与f、g可以相互替换(大小写形式的作用是相同的)。例如:
【实例】使用 scanf() 函数输入半径,计算对应圆的周长和对应球的体积。
1) 为了能接收用户输入的数据,程序代码中定义了一个变量 fRadius。因为 scanf() 函数只能接收用户的数据,而不能输出信息,所以先使用 puts() 函数输出一段字符表示信息提示。
2) 调用 scanf() 函数,从函数参数中可以看到,在格式控制的位置使用双引号对格式字符进行标识,“%f”表示输入的是浮点型数据。在参数中的地址列表位置使用“&”符号表示变量的地址。此时变量 fRadius 已经得到了用户输入的数据。
3) 利用表达式计算圆的周长和球的体积,调用 printf() 函数对变量进行输出。
scanf() 函数的附加格式字符如下表所示。
1) l 附加格式字符。:用于长整型数据,可加在格式字符 d、o、x、u、f 前面。例如:
2) h 附加格式字符:用于短整型整数,可加在格式字符 d、o、x、u、f 前面。例如:
【实例】输入字母和对应的 ASCII 值。
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() 函数的格式控制中,一般形式如下:%格式字符有以下几点说明:
- % 是固定的,不可改变,用到格式字符时 % 不可省略;
- 不同的数据类型要用不同的格式字符来控制数据的输入,如整型数据需要使用 %d 格式输入。
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()的附加格式字符
在格式说明中,“%”符号和格式字符间可以插入几种附加符号(即附加格式字符),一般形式如下:% 附加格式字符 格式字符有以下几点说明。
- % 依然不可省略;
- 格式字符可取表 1 中的任意一种。
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