Sha*_*awn 8 c++ printf cout coordinates
我正在尝试在指定的坐标处打印控制台中的字符.到目前为止,我一直在使用非常丑陋printf("\033[%d;%dH%s\n", 2, 2, "str");但我只是要问C++是否有其他方法可以做到这一点.这个问题甚至不是很难看,当我试图让自己成为一个更漂亮的功能时问题出现了:
void printToCoordinates(int x, int y, string text)
{
printf("\033[%d;%dH%s\n", x, x, text);
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,即使我转向(char*).另一个问题是我必须打印出\n要刷新的页面...我只是不喜欢printf一般使用.
以相若方式使用cout,而不是printf,我认为应该有一个更近的这样的方式(最好的方式,让我轻松地写,我想在屏幕上的字符串,最好是不要求这些奇怪的符号的方式:\033[%d;%dH)
那么,你们中的任何人都有我想要的东西吗?
Jac*_*cob 11
我记得gotoxy(x,y)在Turbo C++(conio.h)中使用 - 不知道它是否适合你.它将光标移动到由x和指定的坐标y.
编辑:如果你使用Windows,这里是一个gotoxy克隆:
#include <windows.h>
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
Run Code Online (Sandbox Code Playgroud)
你正在做的是在纯C++应用程序中使用一些非常终端特定的魔术字符.虽然这样可行,但您可能会更容易使用库,这使您不必处理特定于终端的实现细节,并提供满足您需求的功能.
调查curses或ncurses库是否可用于您的系统.
对功能的一些改进:
void printToCoordinates(int x, int y, const char *format, ...)
{
va_list args;
va_start(args, format);
printf("\033[%d;%dH", x, y);
vprintf(format, args);
va_end(args);
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)
这个版本:
stdout而不打印换行符x和y格式字符串(您使用x和x可能是拼写错误)但是,由于varargs本质上是C功能,并且不能真正理解C ++对象,因此您必须这样称呼它:
printToCoordinates(10, 10, "%s", text.c_str());
Run Code Online (Sandbox Code Playgroud)
更好的选择实际上是使用curses(对于类似Unix的平台)或Win32控制台函数(对于Windows),如其他答案所述。