c格式化输入输出详解

标准化输入输出函数中%号后面的内容一直是个谜。 这里尝试总计一下。 两个函数可以放的部分如下:

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);// - 左对齐, 整数前填充空格,, 输出6位 ,  
 123
printf("%+06d\n",-123); // 加符号, 0填充,。
-00123
printf("%+08.2f\n",123.1); // 加符号, 0填充, 共八个字符, 小数点后2位, 输出浮点型。
+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); //%n的使用, 本地编译器不能使用%n, 在线编译器可以
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() 返回输入的项目数

猜你喜欢

转载自blog.csdn.net/weixin_43705953/article/details/115304823