我编写了一个程序,该程序由多个函数和多个函数组成,当控制权传递给它们时,每个函数都会在控制台上打印几件事情。现在我试图在屏幕中央而不是在屏幕的左上角打印所有内容。为此,我唯一知道的是 Windows.h 的 gotoxy 函数。现在这将是一项非常忙碌的工作,因为我必须将 gotoxy 放在每个“cout”之上。有没有一种方法可以将光标设置到屏幕上的特定位置,并且每次打印任何内容时,都会从该特定位置开始打印。
问问题
1458 次
4 回答
3
编写一个小的辅助函数(例如 printCentered(std::string) )来接收要打印的字符串。该函数将光标移动到中心,然后打印参数。然后用调用这个函数替换你的 couts。
于 2011-05-25T18:47:00.687 回答
2
- 不要使用
cout
或任何其他基于流的 I/O 来绘制整个屏幕。如果流被重定向到不同的设备,那么“定位”流是没有意义的。 - 直接调用Win32 控制台函数,例如在控制台程序中绘制状态线的示例。
于 2011-05-25T18:49:36.883 回答
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";
于 2011-05-25T19:08:54.807 回答
0
假设您正在使用 cout 来写入,这个 hack 应该可以完成这项工作:
#define AT_CENTER( stuff ) goto( 100, 100 ); cout << stuff;
其中 100, 100 应替换为您的特定值。然后在使用中:
AT_CENTER( "The meaning of life is " << x );
于 2011-05-25T18:49:08.687 回答