gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:35:41 32 4
gpt4 key购买 nike

编辑:这是这个问题的续集。 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com