我通常使用cout
和cerr
向控制台写入文本。但是,有时我发现使用很好的老printf
语句更容易。当我需要格式化输出时,我会使用它。
我使用它的一个例子是:
// Lets assume that I'm printing coordinates...
printf("(%d,%d)\n", x, y);
// To do the same thing as above using cout....
cout << "(" << x << "," << y << ")" << endl;
我知道我可以使用cout
格式化输出,但我已经知道如何使用printf
。有什么理由我不应该使用printf
语句吗?
发布于 2010-01-07 09:04:43
如果你曾经希望i18n你的程序,远离iostreams。问题是,如果句子由多个片段组成,就不可能像iostream那样正确地定位字符串。
除了消息片段的问题之外,您还有一个排序问题。考虑一份打印学生姓名和平均成绩的报告:
std::cout << name << " has a GPA of " << gpa << std::endl;
当你把它翻译成另一种语言时,另一种语言的语法可能需要你在名字之前显示GPA。AFAIK,iostream无法对插值的值进行重新排序。
如果您想两全其美(类型安全和能够i18n),请使用Boost.Format。
发布于 2010-01-07 09:02:51
我使用printf是因为我讨厌丑陋的<<cout<<
语法。
发布于 2010-01-07 09:17:07
使用boost::format。你得到了类型安全,std::string支持,像printf一样的接口,使用cout的能力,以及许多其他的好东西。你不会回去的。
https://stackoverflow.com/questions/2017489
复制相似问题