printf通过格式符如%d、%.2f控制输出,高效适用于性能要求高场景;2. cout结合iomanip使用setw、fixed等实现类型安全的灵活格式化。
在C++中,格式
化输出主要有两种方式:使用C语言风格的printf函数和C++标准库中的cout对象。两者各有特点,适用于不同场景。下面详细介绍它们的用法和控制格式的方法。
1. 使用 printf 进行格式化输出
printf 来自 C 标准库,需包含头文件 。它通过格式字符串控制输出样式,语法简洁高效,适合对性能要求较高的场合。
基本语法:
printf("格式字符串", 参数列表);常用格式符:
-
%d:输出十进制整数
-
%f:输出浮点数(默认6位小数)
-
%.2f:保留两位小数
-
%c:输出单个字符
-
%s:输出字符串
-
%x:以十六进制输出整数
-
%o:以八进制输出整数
-
%u:输出无符号整数
示例代码:
#include
int main() {
int num = 42;
double pi = 3.1415926;
char ch = 'A';
const char* str = "Hello";
printf("整数: %d\n", num);
printf("浮点数: %.2f\n", pi);
printf("字符: %c, 字符串: %s\n", ch, str);
printf("十六进制: %x\n", num);
return 0;
}
宽度与对齐控制:
-
%5d:至少占5个字符宽度,右对齐
-
%-5d:左对齐,占5个字符
-
%05d:不足补零,如输出 00042
2. 使用 cout 进行格式化输出
cout 是 C++ 的流对象,来自 iostream>,结合 可实现灵活的格式控制。虽然语法稍显冗长,但类型安全且可扩展性强。
基本用法:
#include stream>
using namespace std;
int main() {
int num = 42;
double pi = 3.1415926;
cout
cout
return 0;
}
常用控制符(需包含 ):
-
setw(n):设置字段宽度
-
setprecision(n):设置精度(总位数或小数位数,取决于是否启用 fixed)
-
fixed:启用定点表示法,此时 precision 控制小数位数
-
scientific:科学计数法
-
left / right:左右对齐
-
setfill(c):设置填充字符
示例:控制浮点数输出
#include
#include
using namespace std;
int main() {
double pi = 3.1415926;
cout
return 0;
}
示例:设置宽度与填充
cout 3. printf 与 cout 的对比
printf 优点:
- 格式控制直观,类似模板
- 性能略高,尤其在大量输出时
- 跨语言通用,熟悉C的人容易上手
缺点:
- 类型不安全,格式符与参数不匹配会导致未定义行为
- 不支持自定义类型,除非转为基本类型
cout 优点:
- 类型安全,编译器自动选择合适的输出函数
- 支持运算符重载,可自定义类的输出
- 组合灵活,可与其他流(如文件、字符串)统一接口
缺点:
- 格式控制较繁琐,需引入额外头文件
- 状态持久,例如设置了 fixed 后需手动取消
4. 实际使用建议
在现代 C++ 开发中,推荐优先使用 cout,尤其是在需要类型安全或扩展性的项目中。对于性能敏感且格式固定的日志输出,printf 或其变体(如 std::format,C++20)可能更合适。
C++20 引入了 std::format,结合了两者的优点,未来有望成为主流:
// C++20 示例(需编译器支持)
#include
#include
std::cout 基本上就这些。掌握 printf 和 cout 的格式控制,能让你在不同场景下灵活输出数据。