c++ - 使用 setw() 正确格式化输出
问题描述
有没有其他方法可以做到这一点?如果这段代码的一部分使它工作,但有什么方法可以使用 setw() 正确组织 (*) 吗?
void showTheater(char theater[][20],int row,int seat)
{
cout << "Seats: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19" << endl;
for (int i = 0; i <= row; i++)
{
for (int j = 0; j <= seat; j++)
{
if (j == 0) {
cout << "Row " << i;
}
else if (i < 10) {
cout << setw(3) << theater[row][seat];
}
else {
cout <<" " << theater[row][seat]<<" ";
}
}
cout << "\n";
}
}
不写 if 部分的输出:
Seats: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Row 0 * * * * * * * * * * * * * * * * * * * * Row 1 * * * * * * * * * * * * * * * * * * * * Row 2 * * * * * * * * * * * * * * * * * * * * Row 3 * * * * * * * * * * * * * * * * * * * * Row 4 * * * * * * * * * * * * * * * * * * * * Row 5 * * * * * * * * * * * * * * * * * * * * Row 6 * * * * * * * * * * * * * * * * * * * * Row 7 * * * * * * * * * * * * * * * * * * * * Row 8 * * * * * * * * * * * * * * * * * * * * Row 9 * * * * * * * * * * * * * * * * * * * * Row 10 * * * * * * * * * * * * * * * * * * * * Row 11 * * * * * * * * * * * * * * * * * * * * Row 12 * * * * * * * * * * * * * * * * * * * * Row 13 * * * * * * * * * * * * * * * * * * * * Row 14 * * * * * * * * * * * * * * * * * * * * Row 15 * * * * * * * * * * * * * * * * * * * *
使用 if 部分输出:
Seats: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Row 0 * * * * * * * * * * * * * * * * * * * * Row 1 * * * * * * * * * * * * * * * * * * * * Row 2 * * * * * * * * * * * * * * * * * * * * Row 3 * * * * * * * * * * * * * * * * * * * * Row 4 * * * * * * * * * * * * * * * * * * * * Row 5 * * * * * * * * * * * * * * * * * * * * Row 6 * * * * * * * * * * * * * * * * * * * * Row 7 * * * * * * * * * * * * * * * * * * * * Row 8 * * * * * * * * * * * * * * * * * * * * Row 9 * * * * * * * * * * * * * * * * * * * * Row 10 * * * * * * * * * * * * * * * * * * * * Row 11 * * * * * * * * * * * * * * * * * * * * Row 12 * * * * * * * * * * * * * * * * * * * * Row 13 * * * * * * * * * * * * * * * * * * * * Row 14 * * * * * * * * * * * * * * * * * * * * Row 15 * * * * * * * * * * * * * * * * * * * *
解决方案
关键是使用std::setw
(与std::left
)作为行的索引。这是代码。请注意,现在星星也与标题对齐。在发布的代码中, 的索引也有错误theater
。
void showTheater(char theater[][20], int row, int seat) {
std::vector<int> Seats (seat);
for (int i = 0; i < seat; i++) Seats[i] = i;
std::cout << "Seats:";
for (int i = 0; i < seat; i++) std::cout << std::setw(3) << Seats[i] << " ";
std::cout << "\n";
for (int i = 0; i < row; i++) {
std::cout << "Row " << std::setw(2) << std::left << i << " ";
for (int j = 0; j < seat; j++) {
std::cout << " " << theater[i][i] << " ";
}
std::cout << "\n";
}
}
编辑:我刚刚发现 HolyBlackCat 已经提到了对齐星星的方法。对不起。至少我还对齐了标题并抑制了setw
打印字符的无用处。
推荐阅读
- ios - Rider Xamarin iOS 错误“部署后未生成应用程序包”
- python-2.7 - Python从文本文件中读取错误
- python-3.x - 构建自定义类型提示
- android - “Windows 和 MAC”上基于 GIT 的 android 项目
- angular - rxjs中finalize和finalize有什么区别
- tensorflow - Tensorflow:模式训练和生成
- php - 为数组中找到的每个索引添加 +1
- go - 在 Go 中加载动态 yaml 结构
- shell - 如何找到 ctime 和 mtime 不同的文件?
- video - laravel-twilio 库发送语音消息