在C++中前往控制台位置(在OSX上)

3

我有一段C++代码,在Windows上可以完美运行,但我想将它移植到OSX上,却遇到了很多编译错误。

在OSX上是否有等效的库?

#include <windows.h>
void gotoXY(int x, int y)
{
     //Set the coordinates
     COORD coord = {x, y};
     //Set the position
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
     return;
}

4
我不明白为什么会被踩。这不是一个合理的问题吗? - One Two Three
3
使用ncurses库:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/ncurses.3x.html - Asesh
3
所以您基本上关闭了所有您没有答案的问题?这就是 Stack Overflow 变成了什么样子吗?(您对“问题不清楚”的借口是胡说八道) - One Two Three
1
我认为这个问题非常容易理解,但是SO并不是寻找库资源的地方。在这种情况下,有一个非常常见的库,ncurses,但如果有很多库,那么答案就会变得不那么有用了。虽然ncurses并不是万能的(还有其他选择),但它可能是最常见的。 - Daniel H
2
@DanielH:不要因为一个问题中出现了“库”这个词就直接关闭它。禁令是关于推荐的。此问题已经足够具体,而且并未要求推荐。 - MSalters
显示剩余2条评论
1个回答

6

推荐使用nCurses库,或使用ANSI转义序列:

// nCurses, you need to initialize the window before
move(x, y);

// ANSI escape seq
printf("\033[%d;%dm", x, y);

谢谢!ESC序列的解决方案真是太棒了!我应该早就想到它了。 - One Two Three
@OneTwoThree 转义序列解决方案通常是有效的,只要你确实在终端上,并且终端没有任何奇怪的问题。如果这不是一次性代码,使用像ncurses这样的库几乎肯定会更好。 - Daniel H
我尝试使用move(),但它不起作用。出现错误提示“不支持x86 64位架构”... 我想我应该重新定义问题,即是否有可能实现这样一个move(x,y)函数,使其在所有平台上都能正常工作(如果可以,如何实现?) - One Two Three
@OneTwoThree 使用宏定义,使您的函数在不同平台上编译时有所不同。 - iBug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接