c++ - 如何让控制台输出写入控制台而不是明文输出?

标签 c++ c

编辑:这是这个问题的续集。 Drawing colors to console causes color flicker

因此,在 C/C++ 中,printfcout 等命令将写入明文输出。因此,为 80×25 文本显示和 60fps 设计的视频游戏必须每帧输出 2000 个字符的文本。我想在屏幕上书写,就像一个命令,比如说,将一个字符串写入第 12 行的第 4 列到第 9 列之类的东西,而不是每次发生变化时不断地附加纯文本。我不是指图形输出,这仍然是文本模式,但不是 plaintext-embedded-in-console 类型的文本模式。

编辑:对于那些想知道的人,输出整个屏幕明文每一帧动画的代码如下所示:https://github.com/PiotrGrochowski/testsortingvisualization/blob/master/test.cpp .有时会出现故障,我还没有计算速度(是否为 60fps)。

编辑:文本显示固定为 80×25 的概念确实意味着没有任何滚动或换行的概念。

编辑:https://en.wikipedia.org/wiki/VGA-compatible_text_mode .在 C/C++ 编程中,如何将其发送到命令提示符?

最佳答案

对于简单的操作,比如光标位置和文字颜色,可以使用ANSI转义码:https://en.wikipedia.org/wiki/ANSI_escape_code#Terminal_output_sequences 如果控制台支持它,这将起作用,它在 Linux、Unix、Mac 上,据称也在 Windows 10 上。

这里有一个例子:https://rosettacode.org/wiki/Terminal_control/Cursor_positioning#C.2FC.2B.2B

如果控制台支持 ANSI 转义码,以下将在第 6 行第 3 列打印“Hello”:

#include <stdio.h>
int main()
{
    printf("\033[6;3HHello\n");
    return 0;
}

在 Windows 上,当控制台不支持 ANSI 时,有 Windows 特定的函数:

#include <windows.h>

int main() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {3, 6};
    SetConsoleCursorPosition(hConsole, pos);
    WriteConsole(hConsole, "Hello", 5, NULL, NULL);
    return 0;
}

您还可以使用适用于 POSIX 的 ncurses 库。

关于c++ - 如何让控制台输出写入控制台而不是明文输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373725/

相关文章:

c++ - Cygwin g++ 编译失败

c++ - 在模板 vector 上返回迭代器

c++ - 中断语句不起作用

c - 段错误字符** C

c - 如何在c中将字符串存储在数组中

c++ - UTF-16 流中的错误 CRLF?

C++ SQLExecDirect INSERT 不起作用

c - C 中对 `main' 的 undefined reference

c - 使用 union 时 .c include 文件中出现多个错误

c - if (i++) 条件如何工作?