格式化输入输出
输入 - printf
printf("%[flags][width][.prec][hlL]type...",参数表...);
返回值
输出的字符数
flag
Flag | 含义 |
---|---|
- | 左对齐 |
+ | 给一个正数强制加一个+号 |
(space) | 正数留空 |
0 | 左边补零,不能和左对齐同时使用 |
width和prec
width | 含义 |
---|---|
number | 最小字符数(整个输出,包括小数点和小数点后的数) |
* | 下一个参数是字符数 |
prec | 含义 |
.number | 小数点后的位数 |
.* | 下一个参数是小数点后的位数 |
/* 关于"*" */
printf("%*d",6,10); // 6会被填到*的位置,然后按%6d的格式print 10
修饰类型
修饰类型 | 含义 |
---|---|
hh | 单个字节 |
h | short |
l | long |
ll | long long |
L | long double |
type
type | 用于 | type | 用于 |
---|---|---|---|
i 或 d | int | g | float |
u | unsigned int | G | float |
o | 八进制 | a 或 A | 16进制浮点数 |
x | 十六进制 | c | char |
X | 字母大写的十六进制 | s | string |
f 或 F | float.6 | P | 指针 |
e 或 E | 指数 | n | 读入/写出的个数 |
关于 %n
的一个例子:
int num = 0;
printf("12345%s%n\n","hello",&num);
printf("%d\n",num);
输出结果:
12345hello
10
输出 - scanf
scanf("%[flag]type...",参数表...);
返回值
读入的项目数(不是读入的字符数)
flag
flag | 含义 | flag | 含义 |
---|---|---|---|
* | 跳过 | l | long, double |
数字 | 最大字符数 | ll | long long |
hh | char | L | long double |
h | short |
关于 *
的一个例子:
int num = 0;
scanf("%*d%d",&num);
printf("%d\n",num);
输入:
123 456
输出:
456
type
type | 用于 | type | 用于 |
---|---|---|---|
d | int | s | 字符串(单词) |
i | 正数,可能为非十进制 | [...] | 所允许的字符 |
u | unsigned int | p | 指针 |
o | 八进制 | ||
x | 十六进制 | ||
a,e,f,g | float | ||
c | char |
关于 i
的一个例子
int num = 0;
for(int i = 0; i < 3; i++){
scanf("%i",&num);
printf("%d\n",num);
}
输入:
12
012
0x12
输出:
12
10
18