C语言printf系列函数格式化输出占位符
本文最后更新于 2026-01-30,文章内容可能已经过时。
C语言printf系列函数的格式化占位符是一套以%开头的结构化指令系统,核心由类型说明符(如d/i整数、f/e/g/a浮点、c/s字符/串、p指针、x/o进制等)构成,并可灵活组合长度修饰符(h/l/ll/L/z/t/j)、格式标志(-/+/#/0/空格)、宽度与精度参数,形成
%[标志][宽度][.精度][长度]类型的标准语法,实现对输出内容的精准控制(包括进制、对齐、填充、小数位、截断等),同时包含%%(输出%)和%n(记录已输出字符数)等特殊功能,全面覆盖所有基本数据类型及复杂格式化场景。
一、基本类型占位符
整数类型
| 占位符 | 说明 | 示例 |
|---|---|---|
| %d / %i | 有符号十进制整数 | printf("%d", -42); → -42 |
| %u | 无符号十进制整数 | printf("%u", 42); → 42 |
| %o | 无符号八进制整数 | printf("%o", 10); → 12 |
| %x | 无符号十六进制整数(小写) | printf("%x", 255); → ff |
| %X | 无符号十六进制整数(大写) | printf("%X", 255); → FF |
浮点数类型
| 占位符 | 说明 | 示例 |
|---|---|---|
| %f / %F | 十进制浮点数 | printf("%f", 3.14); → 3.140000 |
| %e / %E | 科学计数法(小写/大写e) | printf("%e", 3.14); → 3.140000e+00 |
| %g / %G | 自动选择%f或%e格式 | printf("%g", 3.14); → 3.14 |
| %a / %A | 十六进制浮点数(C99) | printf("%a", 3.14); → 0x1.91eb851eb851fp+1 |
字符和字符串类型
| 占位符 | 说明 | 示例 |
|---|---|---|
| %c | 单个字符 | printf("%c", 'A'); → A |
| %s | 字符串 | printf("%s", "Hello"); → Hello |
指针和其他类型
| 占位符 | 说明 | 示例 |
|---|---|---|
| %p | 指针地址(十六进制) | printf("%p", &var); → 0x7ffee4b3a9ac |
| %n | 存储已输出的字符数 | printf("Hello%n", &count); → count=5 |
| %% | 输出百分号本身 | printf("%%"); → % |
二、长度修饰符(与基本类型组合使用)
| 修饰符 | 说明 | 组合示例 | 说明 |
|---|---|---|---|
| h | short | %hd, %hu | short int, unsigned short |
| hh | char | %hhd, %hhu | char, unsigned char |
| l | long | %ld, %lu, %lx | long int, unsigned long |
| ll | long long | %lld, %llu | long long int, unsigned long long |
| L | long double | %Lf, %Le | long double |
| z | size_t | %zd, %zu | size_t类型 |
| t | ptrdiff_t | %td | ptrdiff_t类型 |
| j | intmax_t | %jd | intmax_t/uintmax_t类型 |
三、格式控制标志
| 标志 | 说明 | 示例 | 输出 |
|---|---|---|---|
| - | 左对齐 | printf("%-10d", 42); | 42 |
| + | 显示正负号 | printf("%+d", 42); | +42 |
| 空格 | 正数前加空格 | printf("% d", 42); | 42 |
| # | 替代形式 | printf("%#x", 255); | 0xff |
| 0 | 用0填充 | printf("%05d", 42); | 00042 |
四、宽度和精度控制
宽度控制
- 指定最小字段宽度:%5d(至少占5个字符宽度)
- 左对齐:%-10s
- 0填充:%08d
精度控制
- 浮点数小数位数:%.2f(保留2位小数)
- 字符串最大长度:%.5s(最多输出5个字符)
- 同时指定宽度和精度:%8.2f
五、完整格式说明符结构
%[标志][宽度][.精度][长度修饰符]类型
示例:
printf("%-10.2f", 3.14159); // 左对齐,总宽10,保留2位小数 → "3.14 "
printf("%08x", 255); // 8位宽,0填充,十六进制 → "000000ff"
printf("%+5d", 42); // 5位宽,显示正号 → " +42"
printf("%#o", 10); // 八进制,带前缀 → "012"
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

