printf("%-8s - %s\n", c->name ? c->name : "", c->help);
Run Code Online (Sandbox Code Playgroud)
tem*_*def 12
我想你要找的是
cout << left << setw(8) << (c->name ? c->name : "") << " - " << c->help << endl;
Run Code Online (Sandbox Code Playgroud)
在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);
Run Code Online (Sandbox Code Playgroud)
这分三步进行.第一行读取当前格式化标志cout,包括它当前如何对齐填充输出.第二行实际打印出值.最后,最后一行cout将内部对齐的输出标志重置为旧值.
就个人而言,我认为第一种选择更具吸引力,但知道第二种选择存在是绝对好的,因为它在技术上更正确.
如果你有Boost库:
std::cout << boost::format("%-8s - %s\n") % (c->name ? c->name : "") % c->help;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |