У меня есть карточная колода, которая будет печатать карты на терминале по одному за раз. Однако из-за того, как работает терминал, они печатаются вертикально. Есть ли способ или функция, чтобы заставить их печатать бок о бок? Вот пример моего кода.
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;
В поток нет ничего, что могло бы помочь вам печатать вещи по размеру, но вы могли бы представлять каждую карту как массив форматированных 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
но это боковое шоу.
endl вставляет символ новой строки и очищает выходной поток. Если вы хотите вставить новую строку, вы можете использовать символ "\n". Если вы хотите очистить его (что я сомневаюсь, вы хотите), вы можете использовать std :: flush, и если вы не хотите ни одного из этих двух, вам не нужны std :: endl, '\n' или std :: flush, поэтому вы делаете не использовать их.
endl
перемещает вас на следующую строку, верно?