C语言查漏补缺:占位符篇
占位符篇
- 1. 整数类型
- 2. 字符类型
- 3. 浮点数类型
- 4. 指针类型
- 5. 字符串
- 6. 修饰符
1. 整数类型
%d
/%i
:用于int
(有符号十进制整数)。int num = -42; printf("%d", num); // 输出: -42
%u
:用于unsigned int
(无符号十进制整数)。unsigned int num = 42; printf("%u", num); // 输出: 42
%o
:无符号八进制(octal)。%x
/%X
:无符号十六进制(hex,x
小写,X
大写)。
2. 字符类型
%c
:用于char
(单个字符)。char ch = 'A'; printf("%c", ch); // 输出: A
%hhu
:用于unsigned char
(C99 引入)。%hhd
:用于signed char
(C99 引入)。- 对于
char
类型,推荐用%d
打印 ASCII 码,或用%c
打印字符本身。
3. 浮点数类型
-
%f
:用于float
/double
(默认保留 6 位小数)。double pi = 3.141592; printf("%f", pi); // 输出: 3.141592
-
%e
/%E
:科学计数法(e
小写,E
大写)。 -
%g
/%G
:自动选择%f
或%e
(更紧凑的格式)。 -
%.nf
指定保留n
位小数(n
是任意正整数)。 -
默认情况下,
%f
会保留 6 位小数:printf("%f\n", num); // 输出: 3.141593(默认 6 位)
-
四舍五入规则:
- 如果第
n+1
位 ≥ 5,则第n
位会 进位:printf("%.3f\n", 1.2345); // 输出: 1.235(5 进位) printf("%.3f\n", 1.2344); // 输出: 1.234(4 舍去)
- 如果第
-
动态指定小数位数(C99 支持)**
可以使用*
占位符,并通过参数动态指定小数位数:int precision = 3; printf("%.*f\n", precision, 3.141592); // 输出: 3.142
-
控制总宽度 + 小数位数**
-
%m.nf
:m
是最小总宽度(包括小数点),n
是小数位数。 -
如果数字位数不足,会 右对齐 并用空格填充:
printf("%8.3f\n", 3.14); // 输出: " 3.140"(总宽度 8,右对齐) printf("%-8.3f\n", 3.14); // 输出: "3.140 "(左对齐)
-
- 科学计数法(
%e
/%E
)
printf("%.2e\n", 3141.592); // 输出: 3.14e+03(保留 2 位小数) printf("%.4E\n", 0.000123); // 输出: 1.2300E-04(大写 E)
- 科学计数法(
总结:
需求 | 格式说明符 | 示例 |
---|---|---|
默认 6 位小数 | %f | 3.141593 |
固定 n 位小数 | %.nf | %.2f → 3.14 |
动态 n 位小数 | %.*f | %.*f , 3 → 3.142 |
科学计数法 | %.ne / %.nE | %.2e → 3.14e+00 |
控制总宽度 + 小数位数 | %m.nf | %8.3f → 空格空格空格3.142 |
4. 指针类型
%p
:用于 指针地址(通常以十六进制打印)。int x = 10; printf("%p", (void*)&x); // 输出类似: 0x7ffd42a3bc14
5. 字符串
%s
:用于char*
(C 风格字符串)。char str[] = "Hello"; printf("%s", str); // 输出: Hello
6. 修饰符
格式说明符可以结合 长度修饰符 使用,如:
%hd
:short int
%ld
:long int
%lld
:long long int
%zd
:size_t
(用于sizeof
返回的类型)