标准化输入输出函数中%号后面的内容一直是个谜。 这里尝试总计一下。 两个函数可以放的部分如下:
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() 返回输入的项目数