请在C ++中提出比gotoxy函数更好的建议

时间:2011-05-25 18:43:39

标签: c++ console console-application cout windows-console

我编写了一个程序,它由多个和多个函数组成,每个函数在控制传递给它们时在控制台上打印几个东西。现在我试图在屏幕中央打印所有内容,而不是在屏幕的左上角打印。为此,我唯一知道的是Windows.h的gotoxy函数。现在这将是一个非常忙碌的工作,因为我必须在每个“cout”上面放置gotoxy。有没有办法将光标设置到屏幕上的特定位置,每次打印任何内容时,都会从该特定位置开始打印。

4 个答案:

答案 0 :(得分:3)

编写一个小助手函数(例如printCentered(std :: string)),它接收要打印的字符串。此功能将光标移动到中心,然后打印参数。然后通过调用此函数替换你的couts。

答案 1 :(得分:2)

  1. 请勿使用cout或任何其他基于流的I / O在整个屏幕上进行绘制。它对#34;位置"没有意义。如果它被重定向到另一个设备,则为流。
  2. 直接调用Win32 console functions,例如在控制台程序中绘制状态行的this example

答案 2 :(得分:1)

以下内容允许轻松查找和替换,并负责将光标设置为中心:

#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";

答案 3 :(得分:0)

假设您正在使用cout写入,这个黑客应该做的工作:

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

其中100,100应替换为您的特定值。然后在使用中:

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