如何使用 iomanip 的设置、设置填充和左/右?设置填充不会停止其输出
How do I use iomanip's setw, setfill, and left/right? Setfill isn't stopping its output
我想让我的输出看起来像这样:
size time1 time2
-------------------------------
10 4 8
100 48 16
1000 2937 922
10000 123011 3902
100000 22407380 830722
我知道我需要使用setw()
, setfill()
和left
。然而,我的尝试总是给我不正确的输出。下面是我的代码的一个例子:
std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2n";
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
run = 10;
for(int i = 0; i < 5; i++) {
std::cout << run;
run *= 10;
std::cout << std::setw(20) << std::left << time1[i];
std::cout << std::setw(20) << std::left << time2[i] << "n";
}
输出如下:
size time1 time2
------------------------------------------------------------
103-------------------13------------------
100171-----------------199-----------------
100013183---------------667-----------------
10000670130--------------8205----------------
10000014030798-------------1403079888---------
我试过改变我使用setw()
, setfill()
和left
的顺序,但我现在只是盲目飞行。我还搜索了iomanip教程。就我所知,我是按照说明来的,但我还是不明白。
如何阻止setfill()
跑过?我如何证明左,但使用setw()
来阻止数字相互碰撞?
如何:
std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2n";
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
run = 10;
std::cout << std::setfill(' '); //fill with spaces
for(int i = 0; i < 5; i++) {
std::cout << std::setw(20) << std::left << run; // fill the run column
run *= 10;
std::cout << std::setw(20) << std::left << time1[i];
std::cout << std::setw(20) << std::left << time2[i] << "n";
}
sj0h的回答很好,只是标题不太一致。为了解决这个问题,我以"left"answers"setw"开始标题行,我还必须以"endl"而不是"n"结束。
std::cout << std::left << std::setw(20) << "size" << std::setw(20) << "time" << std::setw(20) << "time2" << std::endl;
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
run = 10;
std::cout << std::setfill(' '); //fill with spaces
for(int i = 0; i < 10; i++) {
std::cout << std::setw(20) << std::left << run; // fill the run column
run *= 10;
std::cout << std::setw(20) << std::left << time1[i];
std::cout << std::setw(20) << std::left << time2[i] << std::endl;
}
在c++ 20中,您将能够使用std::format
来做到这一点:
std::cout << std::format("{:20}{:20}{:20}n", "size", "time", "time2");
std::cout << std::format("{:-<60}n", "");
int run = 10;
for(int i = 0; i < 5; i++) {
std::cout << std::format("{:<20}{:<20}{:<20}n", run, time[i], time2[i]);
run *= 10;
}
输出:size time time2
------------------------------------------------------------
10 4 8
100 48 16
1000 2937 922
10000 123011 3902
100000 22407380 830722
在此期间,您可以使用{fmt}库,std::format
是基于。{fmt}还提供了print
函数,使这更容易和更有效(godbolt):
fmt::print("{:20}{:20}{:20}n", "size", "time", "time2");
fmt::print("{:-<60}n", "");
int run = 10;
for(int i = 0; i < 5; i++) {
fmt::print("{:<20}{:<20}{:<20}n", run, time[i], time2[i]);
run *= 10;
}
免责声明:我是{fmt}和c++ 20 std::format
的作者。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 将十六进制值设置为用于填充的字符变量时出现问题
- 如何使用同时设置计数和填充数组的函数
- 如何调用 GetAltMonthNames 来填充外部区域设置月份字符串的安全数组
- 在编译时填充标准::设置
- 使用强制转换和设置填充将 int 值更改为时间
- 101 Qt 样式表边距填充黑客指南在C++。设置填充不起作用
- C++可以设置和填充字符串的末尾
- C++-填充派生类数据成员,同时设置基类属性值
- 设置填充样式和泛滥填充使用
- 如何将可变大小的静态数组设置为用 0 填充
- OpenCV:设置图像边界,不带填充
- 在打印出字符串后设置填充
- 如何设置一个由mxSetData填充的mxArray的classID
- 我怎么能设置填充样式的主窗口在QT
- 如何使用 iomanip 的设置、设置填充和左/右?设置填充不会停止其输出