printf("%-8s - %s\n", c->name ? c->name : "", c->help);
答案 0 :(得分:12)
我认为您正在寻找的是
cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;
left
和setw(8)
操纵符与%-8s
中的printf
格式说明符具有相同的效果。但是,由于使用#include <iomanip>
,您需要setw
才能使其正常工作。
编辑:正如Matthieu M.所指出的,上面将永久更改cout
,以便任何填充操作打印出左对齐。请注意,这并不像看起来那么糟糕;它仅在您明确使用setw
设置一些填充时适用。您有几个选项可以解决这个问题。首先,您可以强制执行使用setw
之前的规则,您始终使用left
或right
操纵器分别左右对齐文本。或者,您可以使用flags
和setf
函数捕获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;