又是一个随记,方便自己的使用。C++ 中的 scanf
和 printf
其实有很多比 cin
cout
好用的地方,放在这里。
scanf 的使用
读入的格式
就直接上表格吧,先把一些特定的读入格式符放在这儿:
格式符 | 用途 |
---|---|
%d |
读入 int 整型 |
%ld |
读入 long 整型 |
%lld |
读入 long long 整型 |
%hd |
读入 short 整型 |
%u |
读入 unsigned int 整型 |
%lu |
读入 unsigned long 整型 |
%llu |
读入 unsigned long long 整型 |
格式符 | 用途 |
---|---|
%f |
读入 float 类型 |
%lf |
读入 double 类型 |
%Lf |
读入 long double 类型 |
格式符 | 用途 |
---|---|
%c |
读入 char 类型 |
%s |
读入字符串,也就是 char 数组 |
%o |
读入八进制整型 |
%x |
读入十六进制整型 |
以上其实都是一些读入的格式。还有一些能让读入的格式更加丰富的格式化。
限制位数
在以上的任何格式符的 % 后面加上数字 n,即读入的位数就是 n。例如:
int a, b;
scanf("%1d %1d", &a, &b);
printf("%d %d\n", a, b);
假设输入 10345 则会输出 1 0。
只读入,不赋值
在任何格式符的 % 后加上 *,就不会赋值给任何变量。例如:
int a;
long long b;
short c;
scanf("%d %*lld %lld %hd", &a, &b, &c);
printf("%d %lld %hd", a, b, c);
假设输入:
2147483647 4294967295 11415612712638 128
则输出:
2147483647 11415612712638 128
可见,scanf 忽略了第二个数字 4294967295。
printf 的使用
其实它和 scanf 差不多。但是有多了精度,对齐什么的。
标识和宽度
%[标识][宽度]
宽度其实和上面一样,只不过默认右对齐。标识就可以更改。
标识 | 作用 |
---|---|
- |
将宽度的数字左对齐 |
+ |
正数显示正号 |
# |
和 %o 带有八进制前缀 0,和 %x 带有十六进制前缀 0x |
0 |
将宽度的空格变成 0 |
例如:
int a, b, c, d, e, f;
scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);
printf("|%010d|%10d|%-10d|\n", a, b, c); // |往左填零 |宽度为十 |靠左 |
printf("|%+10d|%#10o|%#10x|\n", d, e, f); // |若正数显示正号|更改为八进制,有0前缀|更改为十六进制,有0x前缀|
// 宽度全部为十。
假设输入:
19283 1983 1283 12873 83287 7283
则会输出:
|0000019283| 1983|1283 |
| +12873| 0242527| 0x1c73|
精度
用于小数,用 .n 标识保留 n 为小数。例如:
double p;
scanf("%lf", &p);
printf("%.3lf\n", p); // 保留三位小数
假设输入 114514.1919810 会输出 114514.192。