今天提测发现一个崩溃问题是由于日志格式化输出,格式不正确导致程序崩溃,发现是因为使用占位符时,替换的参数顺序错误导致的,现总结一下C++的格式化输出几种方法:

在C++中,可以使用iostream库提供的输出流对象和格式控制符来进行格式化输出。

以下是一些常用的格式化输出方法:

  1. 使用<<运算符和格式控制符进行输出:
double pi = 3.14159;
int num = 42;

std::cout << "Pi: " << std::fixed << std::setprecision(2) << pi << std::endl;
std::cout << "Number: " << std::setw(5) << std::setfill('0') << num << std::endl;

这个示例中,std::fixedstd::setprecision(2)用于固定小数位并设置精度为两位小数;std::setw(5)std::setfill('0')用于设置输出宽度为5,并在前面填充零。

  1. 使用printf()函数进行格式化输出:
double price = 19.99;
int quantity = 5;

printf("Total price: $%.2f\n", price * quantity);
printf("Quantity: %04d\n", quantity);

这个示例中,%.2f用于格式化输出小数点后两位;%04d用于设置输出占据宽度为4,并在前面填充零。

  1. 使用字符串流(stringstream)进行格式化输出:
#include <sstream>

double weight = 65.5;
int age = 30;

std::stringstream ss;
ss << "Weight: " << std::fixed << std::setprecision(1) << weight << "kg\n";
ss << "Age: " << age << " years old\n";

std::cout << ss.str();

这个示例中,将要输出的内容逐个写入字符串流中,然后通过ss.str()将字符串流的内容转换为字符串进行输出。

这些仅是一些常见的格式化输出方法,可以根据具体需求选择合适的方法。请记得在使用相关库或头文件之前包含相应的头文件(如<iostream><iomanip>等)并使用适当的命名空间(如std)。