标准化输入输出函数中%号后面的内容一直是个谜。 这里尝试总计一下。 两个函数可以放的部分如下:
printf() %[flags][width][.prec][hlL]type
scanf() %[flags]type
scanf()简单一些。
printf()
1 flag
flag | 含义 |
---|
- | 左对齐 |
+ | 在前面放符号(+或-) |
(space) | 正数留空 |
0 | 0填充 |
# | 十六进制、八进制前分别添加标识符0x, 0 |
2 width
width | 含义 |
---|
number | 最小字符数(整个输出的长度) |
* | 下一个参数是字符数 |
.number | 小数点后面的位数 |
.* | 下一个参数是小数点后的位数 |
3 .pre
.pre | 含义 |
---|
.number | 小数点后面的位数 |
.* | 下一个参数是小数点后的位数 |
printf("%- 6d\n",123);
123
printf("%+06d\n",-123);
-00123
printf("%+08.2f\n",123.1);
+0123.10
printf("%#+08.2x\n",12);
0x0c
不加-默认右对齐,显然左对齐之后不能使用0填充。 同一层级的语法之间顺序无关。
4 修饰符
类型修饰 | 含义 |
---|
hh | 单个字节 |
h | short |
l | long |
ll | long |
L | long doubel |
5 类型
类型 | 含义 |
---|
i 或者d | int |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
X | 大写字母的十六进制 |
f或F | float , 6 |
e或E | 指数 |
g | float |
G | float |
a或A | 十六进制浮点 |
c | char |
s | 字符串 |
p | 指针 |
n | 输出或输出的个数 |
int num = 0;
printf("hello world%n\n",&num);
printf("%d\n",num);
hello world
11
scanf()
1 scanf
flag | 含义 |
---|
* | 跳过 |
number | 最大字符数 |
hh | char |
h | short |
l | long, double |
ll | long long |
L | long double |
2 scanf
type | 含义 |
---|
d | int |
i | 整数,可能为十六进制或八进制 |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
a,e,f,g | float |
c | char |
s | 字符串 |
[…] | 所允许的字符 |
p | 指针 |
printf() 和scanf()的返回值
prinff() 返回输出的字符数
scanf() 返回输入的项目数