[英]How can I print a string to the console at specific coordinates in C++?
我正在尝试在控制台中以指定坐标打印字符。 到目前为止,我一直在使用非常难看的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);
}
即使我强制转换为(char*)
,它也不起作用。 另一个问题是,我必须打印出\\n
才能刷新页面...一般而言,我只是不喜欢使用printf
。
与使用cout
代替printf
相似,我认为应该有一种更新的方法(理想情况下,这种方法可以让我轻松地在屏幕上的任何位置编写字符串,理想情况下,不需要这些怪异的符号: \\033[%d;%dH
)
那么,你们中有人有我想要的吗?
诅咒是您想要的。
我记得在Turbo C ++(conio.h)中使用了gotoxy(x,y)
-不知道它是否对您有用。 它将光标移动到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);
}
对功能的一些改进:
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);
}
这个版本:
stdout
而不打印换行符 x
和y
(您对x
和x
可能是拼写错误) 但是,由于varargs本质上是C功能,并且不能真正理解C ++对象,因此您必须这样称呼它:
printToCoordinates(10, 10, "%s", text.c_str());
更好的选择实际上是使用curses(对于类似Unix的平台)或Win32控制台函数(对于Windows),如其他答案所述。
您正在做的是在原本纯净的C ++应用程序中使用一些终端特有的魔术字符。 在此方法有效的同时,您可能会更轻松地使用一个库,该库使您不必处理终端特定的实现细节,并提供满足您需要的功能。
调查curses库或ncurses库是否可用于您的系统。
第一:
void printToCoordinates(int x, int y, string text)
{
printf("\033[%d;%dH%s\n", x, x, text);
}
您不想复制字符串参数,而是想通过( const
)引用传递它。 同样,从std::string
获取char*
的(唯一)正确方法是调用其c_str()
成员函数:
void printToCoordinates(int x, int y, const std::string& text)
{
printf("\033[%d;%dH%s\n", x, x, text.c_str());
}
关于您的问题:C ++无法完成您想要的事情,但是它允许您使用特定于平台的方法来做到这一点。 您必须告诉我们您的平台,以获得有意义的答案。
void screenpos(int x,int y,char textyowanawrite[20])
{
//printf for right shift
// \n for downward shift
//loops through the rows and shifts down
for(int row=0;row<=y;row++)
{
printf("\n");
for (int i = 0; i < x; i++)
{
printf("%s "," " );
}
}
printf("%s ",textyowanawrite );
}
//这应该对某些已灭绝的唯一问题起作用,即您不能从4,4到2,2的某个地方,这就是问题所在
我有一些不同的方法。 不知道这是否比ncurses软件包更好,所以我将其留给支持者决定。
您可以使用C ++中的Graphics包在工作屏幕上将文本输出到特定坐标。 语法为outtextxy(x, y, text) ;
其中x和y是坐标。
一个例子是:
int main(void) {
int gdriver = DETECT, gmode;
int x = 200, y = 200;
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
outtextxy(x, y, "Hello World");
closegraph();
}
这个小程序将在坐标(200,200)中打印Hello World 。
有关图形包可以做什么的参考,请访问此链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.