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返回的类型)
