如何在C++的特定坐标处将字符串打印到控制台?

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)

那么,你们中的任何人都有我想要的东西吗?

Dim*_*ima 12

诅咒是你在寻找的.

  • 或新的veriant nCurses. (2认同)

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)


CB *_*ley 5

你正在做的是在纯C++应用程序中使用一些非常终端特定的魔术字符.虽然这样可行,但您可能会更容易使用库,这使您不必处理特定于终端的实现细节,并提供满足您需求的功能.

调查curses或ncurses库是否可用于您的系统.


Gre*_*ill 5

对功能的一些改进:

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而不打印换行符
  • 使用xy格式字符串(您使用xx可能是拼写错误)

但是,由于varargs本质上是C功能,并且不能真正理解C ++对象,因此您必须这样称呼它:

printToCoordinates(10, 10, "%s", text.c_str());
Run Code Online (Sandbox Code Playgroud)

更好的选择实际上是使用curses(对于类似Unix的平台)或Win32控制台函数(对于Windows),如其他答案所述。