scanf是C语言标准输入输出库中的一个核心函数,它的全称是scan formatted,主要作用是按照指定的格式从标准输入(通常是键盘)读取数据,并将读取到的数据存储到对应的变量中,是C语言程序实现用户交互输入的基础工具。
scanf的基本定义
scanf函数声明在<stdio.h>头文件中,因此在使用scanf之前,必须先引入这个头文件。它的函数原型为:
int scanf(const char *format, ...);
其中第一个参数format是格式控制字符串,用来指定输入数据的类型和读取规则,后面的省略号代表需要接收输入数据的变量地址列表。
scanf的基本用法
使用scanf读取数据时,需要遵循“格式匹配、传入地址”的原则,下面是几个常见的使用示例:
读取单个整数
#include <stdio.h>
int main() {
int num;
// 读取一个整数,存储到num变量中,&是取地址符
scanf("%d", &num);
printf("你输入的整数是:%dn", num);
return 0;
}
读取多个数据
#include <stdio.h>
int main() {
int a;
float b;
char c;
// 依次读取整数、浮点数、字符,输入时用空格或换行分隔
scanf("%d %f %c", &a, &b, &c);
printf("a=%d, b=%.2f, c=%cn", a, b, c);
return 0;
}
常见的格式说明符
scanf的格式控制字符串中常用说明符和printf有很多相似之处,以下是常用的部分:
| 格式说明符 | 对应数据类型 | 说明 |
|---|---|---|
| %d | int | 读取有符号十进制整数 |
| %f | float | 读取单精度浮点数 |
| %lf | double | 读取双精度浮点数 |
| %c | char | 读取单个字符,包括空格和换行 |
| %s | char数组 | 读取字符串,遇到空格、换行会停止 |
使用scanf的注意事项
- scanf读取变量时必须传入变量的地址,也就是要在变量名前加
&取地址符,但是如果是字符数组名本身代表首地址,不需要加&。 - scanf的返回值表示成功读取的变量个数,如果读取失败会返回EOF,可以通过返回值判断输入是否合法。
- 使用
%c读取字符时,会读取输入缓冲区中的任意字符,包括之前输入留下的换行符,需要注意处理缓冲区残留问题。 - 使用
%s读取字符串时,不会读取空格,且会在字符串末尾自动添加