并排打印卡片组

时间:2013-11-23 22:48:40

标签: c++ console output

我有一个卡片组,可以一次打印一张卡片到终端。然而,由于终端如何工作,它们垂直打印。是否有某种方法或功能让它们并排打印?这是我的代码示例。

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;

2 个答案:

答案 0 :(得分:0)

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

What is the C++ iostream endl fiasco?

答案 1 :(得分:0)

流中没有任何东西可以帮助您按尺寸打印东西但是可以将每张卡表示为格式化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,但这是一个侧面展示。