使用setw()正确格式化输出

时间:2018-11-18 09:44:40

标签: c++

还有其他方法吗?如果这段代码的部分可以正常工作,但是有什么方法可以使用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";
    }
}

如果不写则输出:

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 *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *

1 个答案:

答案 0 :(得分:1)

关键是对行的索引使用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