Пожалуйста, предложите что-нибудь лучше, чем функция gotoxy в C ++ - PullRequest
1 голос
/ 25 мая 2011

Я написал программу, состоящую из кратных и кратных функций, каждая из которых печатает несколько вещей на консоли, когда управление передается им.Сейчас я пытаюсь напечатать все в центре экрана, а не в левом верхнем углу экрана.Для этой цели я знаю только функцию gotoxy в Windows.h.Теперь это было бы чрезвычайно беспокойной работой, потому что я должен был бы поместить gotoxy выше каждого "cout".Есть ли способ, которым я устанавливаю курсор на определенную позицию на экране, и каждый раз, когда что-либо печатается, печать начинается с этой конкретной позиции.

Ответы [ 4 ]

3 голосов
/ 25 мая 2011

Напишите небольшую вспомогательную функцию (например, printCentered (std :: string)), которая получает строку для печати.Эта функция перемещает курсор в центр и затем печатает параметр.Затем замените свои кровати на вызов этой функции.

2 голосов
/ 25 мая 2011
  1. Не используйте cout или любой другой потоковый ввод / вывод для рисования по всему экрану.Не имеет смысла «позиционировать» поток, если он перенаправляется на другое устройство.
  2. Вызовите Win32 консольных функций напрямую, например в этом примере который рисует строку состояния в консольной программе.
1 голос
/ 25 мая 2011

Следующее позволяет легко находить и заменять и заботится о том, чтобы установить курсор в центр:

#include <iostream>

std::ostream& PrintCentered(){
  // comment in the following if you're experiencing
  // weird output due to io-buffering like @Ben says in a comment
  //std::cout.flush();
  gotoxy(your_x, your_y);
  return std::cout;
}

Теперь просто найдите и замените ваши std::cout вызовы вышеуказанной функцией там, где вы хотите, чтобы она былапо центру.Использование после замены должно выглядеть так:

PrintCentered() << "your message";
0 голосов
/ 25 мая 2011

Если вы используете cout для записи, этот хак должен выполнить работу:

 #define AT_CENTER( stuff ) goto( 100, 100 ); cout << stuff;

Где 100, 100 следует заменить вашими конкретными значениями. Тогда в использовании:

 AT_CENTER( "The meaning of life is " << x );
...