scanf详解
大约 2 分钟输入输出
概念
scanf 是 语言中的标准输入函数,在 中同样可用,属于 <cstdio> 库。
在信息竞赛中,scanf 通常比 cin 更快,尤其是在处理大量输入数据时。
基本语法
scanf(const char* format, …);format 是格式控制字符串
后续参数是用于存储读取值的变量地址
返回值是成功读入的数据项个数
常用格式说明符
整数类型
%d : %ld : %lld : %u :
浮点类型
%f : %lf : %Lf :
字符和字符串
%c : 单个字符%s : 字符串
举几个栗子
读取基本数据类型
int a;
double b;
char c;
scanf("%d %lf %c", &a, &b, &c);读取字符串
char ch[100];
scanf("%s", ch); // 注意:字符数组名不需要&特点 :
- 读取到空白字符(空格、换行、制表符)为止
- 自动在末尾添加
\0 - 字符串数组名不需要 & 符号
读取二维字符数组
char ew[100][100];
for (int i = 0; i < n; i++) {
scanf("%s", ew[i]); // 每次读取一行
}这种方法非常高效,特别适合读取网格地图。
指定宽度和精度
int a;
scanf("%5d", &a); // 最多读取5个字符作为整数小技巧
读取不确定数量的输入
int a;
while (scanf("%d", &a) != EOF) {
// 处理数据
}跳过特定字符
scanf("%d,%d", &a, &b); // 跳过逗号scanf(" %s", str); // 跳过前导空白读取行(包括空格)
char line[100];
scanf(" %[^\n]", line); // 读取一整行,包括空格注意事项
内存安全 :确保为字符串分配足够的空间,避免缓冲区溢出
// 更安全的方式
char str[100];
scanf("%99s", str); // 指定最大读取长度输入验证 :始终检查 scanf 的返回值以确保成功读取
格式匹配 :确保格式说明符与变量类型匹配
地址传递 :除字符数组外,所有变量都需要用 & 取地址
