并排打印卡片组

Printing a card deck side-by-side

本文关键字:打印      更新时间:2023-10-16

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

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插入换行符并刷新输出流。如果要插入新行,可以使用"\n"字符。如果你想刷新它(我怀疑你是否想要),你可以使用std::flush,如果你不想要这两个,那么你不需要std::endl、'\n'或std::flush,这样你就不用它们了。

C++iostream endl的惨败是什么?

流中没有任何内容可以帮助您按大小并排打印,但您可以将每张卡表示为格式化的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';
}

很明显,你不想从常数中格式化卡片,但我想传达这个想法,而不是迷失在格式化每张卡片的细节中。当然,您不想使用std::endl,但这只是一个附带说明。