【问题标题】:Printing a card deck side-by-side并排打印卡片组
【发布时间】:2013-11-23 22:48:40
【问题描述】:

我有一个卡片组,可以一次将卡片打印到终端上。然而,由于终端的工作方式,它们垂直打印。有什么方法或功能可以让它们并排打印吗?这是我的代码示例。

cout << "---------" << endl;
cout << "|"<<"6"<<setw(7)<<"|"<<endl;
cout << "|"<<setw(4)<< "S" << setw(6)<<"S"<<setw(2)<<"|"<<endl;
cout << "|"<<setw(8)<<"|"<<endl;
cout << "|"<<setw(8)<<"|"<<endl;
cout << "|"<<setw(4)<< "S" << setw(6)<<"S" <<setw(2)<<"|"<<endl;
cout << "|"<<setw(8)<<"|"<<endl;
cout << "|"<<setw(8)<<"|"<<endl;
cout << "|"<<setw(4)<< "S" << setw(6)<<"S"<<setw(2)<<"|"<<endl;
cout << "|"<<setw(7)<<"6"<<"|"<<endl;
cout << "---------" << endl;

【问题讨论】:

  • 您知道endl 会将您移至下一行,对吧?

标签: c++ console output


【解决方案1】:

endl 插入换行符并刷新输出流。如果要插入新行,可以使用 '\n' 字符。如果你想刷新它(我怀疑你想要),你可以使用 std::flush ,如果你不想要这两个,那么你不需要 std::endl、'\n' 或 std::flush 所以你这样做不要使用它们。

What is the C++ iostream endl fiasco?

【讨论】:

    【解决方案2】:

    流中没有内置任何东西可以帮助您按大小打印,但您可以将每张卡片表示为格式化std::strings 的数组,然后并排打印卡片所有卡片的每一行。例如:

    class card {
    public:
        std::string get_row(int row) const {
            switch (row) {
                case 0: case 10: return "---------";
                case 1: return "|6      |";
                // ...
            }
        }
        // ...
    };
    std::vector<card> deck;
    // fill the deck
    for (int i(0); i != 11; ++i) {
        for (auto const& card: deck) {
            std::cout << card.get_row(i);
        }
        std::cout << '\n';
    }
    

    显然,您不想从常量格式化卡片,但我想传达这个想法,而不是迷失在格式化每张卡片的细节中。当然,你don't want to use std::endl 但那是个插曲。

    【讨论】:

    • 嗯..有趣。我将不得不对此进行更多研究。
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2011-07-04
    • 1970-01-01
    • 2021-12-09
    • 2023-03-28
    • 2015-03-01
    相关资源
    最近更新 更多