【问题标题】:gotoxy() function substitute for Dev C not working替代 Dev C 的 gotoxy() 函数不起作用
【发布时间】:2017-12-13 04:38:17
【问题描述】:

我正在为 Dev C++ v5.11(gcc 编译器)寻找 gotoxy 的替代品,结果发现:

void gotoxy(int x,int y) {
    printf("%c[%d;%df", 0x1b, y, x);
}

之后,当我尝试按如下方式调用此函数时:

int main() {
    gotoxy(20, 10);
    printf("Hello");
    return 0;
}

输出不如预期:

<-[10;20fHello

这是打印在屏幕的最左上角(即 1,1) 而不是 (20,10)。

请给我一些建议,告诉我如何在我的代码中使用gotoxy

【问题讨论】:

  • 这看起来像一个 ANSI 转义序列。我认为 Windows 控制台不支持这些。
  • 您可以使用this open-source CONIO implementation for MinGW/Dev-C++。安装 Devpak 后,您需要将编译器路径配置为指向 Dev-C++ 安装目录中的 includelib 目录(例如,C:\Program Files (x86)\Dev-C++ 5.11\include 用于标头,C:\Program Files (x86)\Dev-C++ 5.11\lib 用于库)。然后,您需要确保链接 lib。 64 位版本需要-lconio_64-lconio_unicode_64,具体取决于您是否#define UNICODE。 32 位只删除了_64。然后根据需要只需#include &lt;conio2.h&gt;
  • 在使用 Wayback Machine 对the docs for SetConsoleMode 的更新进行了一些挖掘之后,Windows 10 周年更新添加了一些对控制台输出的 VT100 支持,似乎 2017 年春季的创意者更新增加了更多支持,包括输入。有关如何使用它们的更多信息以及如何启用这些功能的示例,请参阅Console Virtual Terminal Sequences。不确定它是否适用于 Win8.1 或更早版本:(
  • 请注意,对于那些想知道的人来说,这些功能似乎不适用于 wineconsole
  • per this 'en.wikipedia.org/wiki/ANSI_escape_code' windows 10 之前没有包含终端操作功能。但是,您可以使用诸如 ansi.com 之类的驱动程序来启用 ansi 转义序列。

标签: c dev-c++ conio


【解决方案1】:

也可以用这个。

#include <windows.h>

void gotoxy(int x,int y){
COORD V={x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), V);
}

【讨论】:

  • 此解决方案在 Windows 上有效,并且仅在您的应用程序分配本地 Windows 控制台时有效。另一方面,正确的 ANSI 序列将适用于大多数其他操作系统和终端仿真器。
  • 是的。我应该提到这一点。但是,由于这篇文章是关于 Dev C++ 的,我认为它已经被理解了,因为 Dev C++ 仅适用于 Windows 平台,它可以创建基于 Windows 或控制台的 C++ 程序。无论如何,谢谢你提到这一点。
【解决方案2】:

您的 ANSI 转义序列不正确,应该是 \033[%d;%dH,但您的终端似乎根本不支持 ANSI VT100 转义序列。在 Windows 中,可能有一个配置设置来启用它,VT100 仿真是大多数现代操作系统终端(unix、linux、BSD、OS/X...)的标准配置。

这里是修改后的代码:

#include <stdio.h>

void gotoxy(int x, int y) {
    printf("\033[%d;%dH", y, x);
}

int main(void) {
    gotoxy(20, 10);
    printf("Hello\n");
    return 0;
}

【讨论】:

  • @JaladhSinghal:您可以通过点击分数下方的灰色复选标记来接受其中一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 2018-07-26
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多