scanf是C语言标准输入输出库中的一个核心函数,全称为scan formatted,也就是格式化扫描的意思,它的主要作用是从标准输入设备(通常是键盘)读取用户输入的数据,然后按照开发者指定的格式,将读取到的数据存储到对应的变量中,是C语言中实现人机交互输入功能的常用工具。

scanf的基本语法
scanf的使用需要包含标准输入输出头文件<stdio.h>,它的基本语法格式如下:
#include <stdio.h> int scanf(const char *format, ...);
其中format是格式控制字符串,用来指定输入数据的类型和格式,后面的省略号代表需要接收输入数据的变量地址列表,需要注意的是,这里必须传入变量的地址,而不是变量本身,否则会导致程序运行错误。
常见格式符说明
scanf支持多种格式符,用来匹配不同类型的输入数据,常见的格式符如下表所示:
| 格式符 | 含义 |
|---|---|
| %d | 读取有符号十进制整数 |
| %f | 读取单精度浮点数 |
| %lf | 读取双精度浮点数 |
| %c | 读取单个字符 |
| %s | 读取字符串,遇到空白字符停止 |
基础使用示例
下面是一个简单的示例,演示如何使用scanf读取用户输入的整数和浮点数:
#include <stdio.h>
int main() {
int num;
float score;
// 提示用户输入整数
printf("请输入一个整数:");
// 读取整数,&是取地址符,获取num变量的内存地址
scanf("%d", &num);
// 提示用户输入浮点数
printf("请输入一个浮点数:");
// 读取浮点数,存储到score变量中
scanf("%f", &score);
// 输出读取到的内容
printf("你输入的整数是:%d,浮点数是:%fn", num, score);
return 0;
}
使用scanf的注意事项
- scanf读取字符串时,不需要在变量名前加取地址符&,因为数组名本身代表数组的首地址,例如
char str[20]; scanf("%s", str);是正确的写法。 - 使用%c格式符读取字符时,会读取输入缓冲区中的任意字符,包括空白字符(空格、换行、制表符),如果需要跳过空白字符,可以在%c前加一个空格,例如
scanf(" %c", &ch);。 - scanf的返回值是成功读取的变量个数,如果读取失败会返回EOF,我们可以通过返回值判断输入是否成功。
- 不要使用scanf读取长度不确定的字符串,避免出现缓冲区溢出的安全问题,读取字符串时最好指定最大长度,例如
scanf("%19s", str);,表示最多读取19个字符,留一个位置给字符串结束符 。
返回值示例
下面的代码演示了如何通过scanf的返回值判断输入是否成功:
#include <stdio.h>
int main() {
int a;
int ret = scanf("%d", &a);
if (ret == 1) {
printf("输入成功,你输入的数字是:%dn", a);
} else {
printf("输入失败,请输入有效的整数n");
}
return 0;
}