如何将此C行转换为C ++?使用cout命令

时间:2011-02-11 07:35:34

标签: c++ c

printf("%-8s - %s\n", c->name ? c->name : "", c->help);

2 个答案:

答案 0 :(得分:12)

我认为您正在寻找的是

cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;

leftsetw(8)操纵符与%-8s中的printf格式说明符具有相同的效果。但是,由于使用#include <iomanip>,您需要setw才能使其正常工作。

编辑:正如Matthieu M.所指出的,上面将永久更改cout,以便任何填充操作打印出左对齐。请注意,这并不像看起来那么糟糕;它仅在您明确使用setw设置一些填充时适用。您有几个选项可以解决这个问题。首先,您可以强制执行使用setw之前的规则,您始终使用leftright操纵器分别左右对齐文本。或者,您可以使用flagssetf函数捕获cout中标记的当前状态:

ios_base::fmtflags currFlags = cout.flags();
cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;
cout.setf(currFlags, ios_base::adjustfield);

这分三步进行。第一行从cout读取当前格式化标志,包括它当前如何对齐填充输出。第二行实际打印出值。最后,最后一行将cout的内部对齐输出标志重置为旧值。

就个人而言,我认为第一种选择更具吸引力,但知道第二种选择存在是绝对好的,因为它在技术上更正确。

答案 1 :(得分:9)

如果您有Boost库:

std::cout << boost::format("%-8s - %s\n") % (c->name ? c->name : "") % c->help;