格式化输入函数 scanf 使用方法:
作为 C 程序的格式化输入库函数 ,scanf()
的函数声明包含在头文件 <stdio.h> 中,函数的一般形式为:
scanf(<格式说明字符串>,<参数地址表列>);
scanf()
函数从标准输入设备 (键盘) 获取数据赋值给程序变量。其函数形式与格式化输出函数printf
相似。
- < 格式说明字符串 > , < 参数地址表列 > 均是必要参数;
- < 格式说明字符串 > 由双引号括起来, 内含的 % 格式说明符与 < 参数地址表列 > 一一对应 , 给出数据输入格式,其具体形式与
printf
函数的< 格式说明字符串 >相同; - < 参数地址表列 > 中应使用取地址运算符
&
给出变量在内存的地址,若存在多个参数则以逗号相隔。
注意:参数表列提供的是变量地址&a
,而不是变量a
。
格式化输入函数 scanf 的格式说明符:
格式说明符 | 输入的数据类型 |
---|---|
%d | 十进制整型数 |
%f | 浮点数 |
%o | 八进制整型数 |
%x | 十六进制整型数 |
%c | 一个字符 |
%s | 字符串 |
scanf
会忽略 相邻 % 格式说明中的空格和制表符。
一个小例子:
#include<stdio.h>
mian(){
int n;
float a;
scanf("%d,%f",&n,&a); // 这里 %d 和 %f 之间增加一个逗号
printf("n = %d, a = %f\n", n, a);
}
测试输入:20 34.43
输出:
n = 20, a = -107374176.000000
这里的 a 值有明显的错误 , 因为增加的逗号属于字符字面值。这里需要注意的是,scanf
允许字符字面值出现在其格式说明字符串中,但在输入时, 要求必须在对应的位置输入相同的字符字面值。 所以我们必须用如下输入方式: 测试输入一:20,34.43
输出:
n = 20, a = 34.430000
测试输入二:20, 34.43
输出:
n = 20, a = 34.430000
从第二个样例可以发现,当在输入的整数后面紧跟着输入了逗号后,在下一个要输入的浮点数前面(对应代码中逗号后面的
%f
)输入的多个空格会被忽略。
将原代码进一步修改成如下代码:
#include<stdio.h>
mian(){
int n;
float a;
scanf("n=%d,a=%f",&n,&a); // 这里增加多个字符字面值
printf("n = %d, a = %f\n", n, a);
}
测试输入:n=20, a=34.43
输出:
n = 20, a = -107374176.000000
这里的 a 值有明显的错误,因为输入时字符字面值必须与 scanf
格式说明字符串严格匹配,不能在字符字面值中间插入空格和制表符。 这里应当使用如下输入:
测试输入:n=20,a=34.43
输出:
n = 20, a = 34.430000
任务:
根据输入的半径计算圆的面积。
要求:
根据控制台输入的半径计算一个圆的面积。 π 已定义为符号常量 PI 。 格式要求: 输入的半径要求为整数,输出的面积要求6位精度并且在数值前添加“半径x的圆面积为:
”, 其中 x 是输入的半径数值。
测试输入:3
预期输出: 半径3的圆面积为:28.274334
测试输入:4
预期输出: 半径4的圆面积为:50.265480
参考:
#include<stdio.h>
#define PI 3.1415926 /* 定义圆周率常量 */
main()
{
int r;
float area;
scanf("%d",&r);
area = PI*r*r;
printf("半径%d的圆面积为:%0.6f",r,area);
}