C/C++中常用格式说明符有哪些,分别有哪些用法?
·
C/C++常用格式说明符详解:按数据类型分类指南
一、整型数据格式说明符
1.1 基本整型格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%d |
int |
十进制有符号整数 | printf("%d", 42); |
42 |
%u |
unsigned int |
十进制无符号整数 | printf("%u", 42); |
42 |
%o |
int |
八进制整数 | printf("%o", 10); |
12 |
%x |
int |
小写十六进制 | printf("%x", 255); |
ff |
%X |
int |
大写十六进制 | printf("%X", 255); |
FF |
1.2 长整型格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%ld |
long |
长十进制整数 | printf("%ld", 123456L); |
123456 |
%lu |
unsigned long |
无符号长整型 | printf("%lu", 123456UL); |
123456 |
%lx |
long |
长十六进制 | printf("%lx", 255L); |
ff |
%lld |
long long |
长长整型 | printf("%lld", 123456789LL); |
123456789 |
1.3 整型格式化控制
| 修饰符组合 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|
%10d |
宽度10,右对齐 | printf("%10d", 42); |
········42 |
%-10d |
宽度10,左对齐 | printf("%-10d", 42); |
42········ |
%010d |
宽度10,前导零 | printf("%010d", 42); |
0000000042 |
%+d |
显示正负号 | printf("%+d", 42); |
+42 |
二、浮点型数据格式说明符
2.1 基本浮点格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%f |
float/double |
十进制浮点 | printf("%f", 3.14); |
3.140000 |
%e |
float/double |
科学计数法(小写e) | printf("%e", 1234.5); |
1.234500e+03 |
%E |
float/double |
科学计数法(大写E) | printf("%E", 1234.5); |
1.234500E+03 |
%g |
float/double |
自动选择%f或%e | printf("%g", 1234.5); |
1234.5 |
2.2 浮点型精度控制
| 格式符组合 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|
%.2f |
保留2位小数 | printf("%.2f", 3.14159); |
3.14 |
%10.2f |
宽度10,精度2 | printf("%10.2f", 3.14); |
······3.14 |
%e |
默认精度科学计数法 | printf("%e", 0.000123); |
1.230000e-04 |
%.3e |
精度3的科学计数法 | printf("%.3e", 0.000123); |
1.230e-04 |
三、字符和字符串格式说明符
3.1 字符型格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%c |
char |
单个字符 | printf("%c", 'A'); |
A |
%c |
int |
ASCII码转字符 | printf("%c", 65); |
A |
3.2 字符串格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%s |
char* |
字符串输出 | printf("%s", "hello"); |
hello |
%.5s |
char* |
输出前5个字符 | printf("%.5s", "hello world"); |
hello |
%10s |
char* |
宽度10,右对齐 | printf("%10s", "hi"); |
········hi |
%-10s |
char* |
宽度10,左对齐 | printf("%-10s", "hi"); |
hi········ |
四、指针和特殊格式说明符
4.1 指针格式符
| 格式符 | 数据类型 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|---|
%p |
void* |
指针地址 | int x; printf("%p", &x); |
0x7ffe… |
4.2 特殊格式符
| 格式符 | 功能说明 | 示例代码 | 输出结果 |
|---|---|---|---|
%% |
输出%字符 | printf("折扣:20%%"); |
折扣:20% |
%n |
已输出字符数 | int count; printf("hello%n", &count); |
count=5 |
五、综合对比表格
5.1 按数据类型分类速查表
| 数据类型 | 主要格式符 | 替代格式符 | 适用场景 |
|---|---|---|---|
| 有符号整型 | %d |
%i |
普通整数输出 |
| 无符号整型 | %u |
- | 无符号数值 |
| 八进制 | %o |
- | 权限设置、位操作 |
| 十六进制 | %x, %X |
- | 内存地址、颜色值 |
| 长整型 | %ld, %lu |
- | 大整数处理 |
| 浮点数 | %f |
- | 普通小数 |
| 科学计数 | %e, %E |
- | 极大极小数值 |
| 字符 | %c |
- | 单个字符输出 |
| 字符串 | %s |
- | 文本输出 |
| 指针 | %p |
- | 调试、内存分析 |
5.2 格式化修饰符功能表
| 修饰符 | 适用格式符 | 功能说明 | 示例 |
|---|---|---|---|
| 数字 | 所有 | 最小字段宽度 | %10d |
.数字 |
%f, %s等 |
精度控制 | %.2f, %.5s |
- |
所有 | 左对齐 | %-10d |
+ |
数值类型 | 显示正负号 | %+d |
| 空格 | 数值类型 | 正数前留空 | % d |
0 |
数值类型 | 前导零填充 | %08d |
# |
%x, %o等 |
替代形式 | %#x输出0xff |
六、实用示例代码
6.1 整型格式化实战
#include <stdio.h>
int main() {
int num = 255;
// 不同进制输出
printf("十进制: %d\n", num); // 255
printf("八进制: %o\n", num); // 377
printf("十六进制: %x\n", num); // ff
printf("带前缀十六进制: %#x\n", num); // 0xff
// 格式化控制
printf("右对齐: |%10d|\n", num); // | 255|
printf("左对齐: |%-10d|\n", num); // |255 |
printf("前导零: |%010d|\n", num); // |0000000255|
return 0;
}
6.2 浮点型格式化实战
#include <stdio.h>
int main() {
double pi = 3.1415926535;
// 不同精度控制
printf("默认: %f\n", pi); // 3.141593
printf("2位小数: %.2f\n", pi); // 3.14
printf("科学计数: %e\n", pi); // 3.141593e+00
// 宽度和精度组合
printf("宽度10精度3: |%10.3f|\n", pi); // | 3.142|
printf("科学计数精度2: %.2e\n", 1234.56); // 1.23e+03
return 0;
}
6.3 字符和字符串格式化实战
#include <stdio.h>
int main() {
char ch = 'A';
char str[] = "Hello World";
// 字符输出
printf("字符: %c\n", ch); // A
printf("ASCII码: %d\n", ch); // 65
// 字符串格式化
printf("完整字符串: %s\n", str); // Hello World
printf("前5字符: %.5s\n", str); // Hello
printf("右对齐: |%15s|\n", str); // | Hello World|
printf("左对齐: |%-15s|\n", str); // |Hello World |
return 0;
}
七、常见错误与注意事项
7.1 类型匹配错误
| 错误用法 | 问题描述 | 正确用法 |
|---|---|---|
printf("%d", 3.14); |
类型不匹配,输出错误 | printf("%d", (int)3.14); |
printf("%f", 10); |
整型用浮点格式符 | printf("%f", 10.0); |
printf("%s", 'A'); |
字符误用字符串格式符 | printf("%c", 'A'); |
7.2 缓冲区安全
// 危险:可能缓冲区溢出
char buf[10];
sprintf(buf, "这是一个很长的字符串"); // ❌ 不推荐
// 安全:使用长度限制
snprintf(buf, sizeof(buf), "安全字符串"); // ✅ 推荐
八、总结
通过本文的详细分类讲解,我们可以看到C/C++格式说明符的丰富性和灵活性。关键要点总结:
- 类型匹配:确保格式符与数据类型严格匹配
- 精度控制:合理使用精度修饰符提升输出质量
- 安全第一:避免缓冲区溢出等安全问题
- 场景选择:根据具体需求选择合适的格式符组合
掌握这些格式说明符的使用,能够让你的程序输出更加专业和美观,同时也能在调试和日志记录中发挥重要作用。建议在实际编程中多加练习,熟能生巧。
上一篇:详细阐述时间复杂度和空间复杂度定义、算法、和原理,,举例通过C/C++里面说明

不积跬步,无以至千里。
代码铸就星河,探索永无止境
在这片由逻辑与算法编织的星辰大海中,每一次报错都是宇宙抛来的谜题,每一次调试都是与未知的深度对话。不要因短暂的“运行失败”而止步,因为真正的光芒,往往诞生于反复试错的暗夜。
请铭记:
- 你写下的每一行代码,都在为思维锻造韧性;
- 你破解的每一个Bug,都在为认知推开新的门扉;
- 你坚持的每一分钟,都在为未来的飞跃积蓄势能。
技术的疆域没有终点,只有不断刷新的起点。无论是递归般的层层挑战,还是如异步并发的复杂困局,你终将以耐心为栈、以好奇心为指针,遍历所有可能。
向前吧,开发者!
让代码成为你攀登的绳索,让逻辑化作照亮迷雾的灯塔。当你在终端看到“Success”的瞬间,便是宇宙对你坚定信念的回响——
此刻的成就,永远只是下一个奇迹的序章! 🚀
(将技术挑战比作宇宙探索,用代码、算法等意象强化身份认同,传递“持续突破”的信念,结尾以动态符号激发行动力。)
//c++ hello world示例
#include <iostream> // 引入输入输出流库
int main() {
std::cout << "Hello World!" << std::endl; // 输出字符串并换行
return 0; // 程序正常退出
}
print("Hello World!") # 调用内置函数输出字符串
package main // 声明主包
#python hello world示例
import "fmt" // 导入格式化I/O库
//go hello world示例
func main() {
fmt.Println("Hello World!") // 输出并换行
}
//c# hello world示例
using System; // 引入System命名空间
class Program {
static void Main() {
Console.WriteLine("Hello World!"); // 输出并换行
Console.ReadKey(); // 等待按键(防止控制台闪退)
}
}
更多推荐


所有评论(0)