首页 > 解决方案 > 使用 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 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *

标签: c++

解决方案


关键是使用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打印字符的无用处。


推荐阅读