本文最后更新于 167 天前,其中的信息可能已经有所发展或是发生改变。
读入带空格的字符串
char str[1024];
scanf("%[^\n]",&str); // 读取到'\n'为止,不读入'\n'
getchar(); // 清除'\n'int num;
string str;
cin >> num; // 读取数字
cin.ignore(); // 跳过数字后的'\n'
getline(cin, line); // 读取整行输入,包括换行符'\n',但'\n'不会存储在 line 中。循环读入
// 快速读取整数(C风格)
int num;
while (scanf("%d", &num) != EOF) { ... }
// 逐字符读取
char ch;
while ((ch = getchar()) != EOF) { ... }int num;
string line;
// 读取数字
while (cin >> num) { ... }
// 读取行
while (getline(cin, line)) { ... }快读
int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }
while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
return x * f;
}
// 使用:
int a = read();
long long b = read();scanf 的高级用法
(1) 扫描集 %[] —— 读取特定字符
%[abc]:只读取a、b或c,遇到其他字符停止。%[^abc]:读取直到遇到a、b或c为止。%[^\n]:读取整行(直到\n,但不包括\n)。c复制char str[100]; scanf(“%[^\n]”, str); // 读取一行(不含换行符) getchar(); // 吃掉残留的 \n注意:%[^\n]不会自动限制长度,容易缓冲区溢出,建议用%99[^\n]限制。
char str[100];
scanf("%[^\n]", str); // 读取一行(不含换行符)
getchar(); // 吃掉残留的 \n(2) 跳过输入 %*
%*d:读取但不存储整数(跳过该输入)。
int a, b;
scanf("%d %*d %d", &a, &b); // 输入 "1 2 3",a=1, b=3(跳过 2)(3) 宽度限制 %Ns
%5s:最多读取 5 个字符(防止缓冲区溢出)。
char name[10];
scanf("%9s", name); // 最多读 9 个字符(留 1 位给 '\0')(4) 混合输入数字和字符串
scanf不会自动跳过空白字符(如\n、),需要手动处理:
int a;
char c;
scanf("%d", &a); // 读取整数
scanf(" %c", &c); // 注意前面的空格,跳过空白符(5) 检测输入结束(EOF)
scanf返回成功读取的变量个数,EOF表示输入结束:
int num;
while (scanf("%d", &num) != EOF) {
// 处理 num
}printf 的高级用法
(1) 格式化输出
| 格式 | 作用 | 示例 | 输出 |
|---|---|---|---|
%5d | 固定宽度 5 位(右对齐) | printf("%5d", 123); | 123 |
%-5d | 固定宽度 5 位(左对齐) | printf("%-5d", 123); | 123 |
%05d | 不足 5 位补 0 | printf("%05d", 123); | 00123 |
%.2f | 保留 2 位小数 | printf("%.2f", 3.14159); | 3.14 |
%x / %X | 十六进制(小写/大写) | printf("%x", 255); | ff |
%o | 八进制 | printf("%o", 8); | 10 |
%p | 指针地址 | printf("%p", &a); | 0x7ffd... |
(2) 动态指定宽度/精度
- 用
*动态传入宽度或精度:
int width = 5, precision = 2;
printf("%*.*f", width, precision, 3.14159); // 输出 " 3.14"(3) 输出 % 符号
- 用
%%输出%:
printf("Success rate: 100%%"); // 输出 "Success rate: 100%"(4) 打印字符串(限制长度)
%.5s:只打印前 5 个字符:
printf("%.5s", "Hello World"); // 输出 "Hello"(5) 对齐 + 填充
- 左对齐 + 填充
-:
printf("%-10s", "Hello"); // 输出 "Hello "- 右对齐 + 填充
0:
printf("%05d", 42); // 输出 "00042"








