如何让控制台输出覆盖控制台而不是纯文本输出?

How do I get the console output to write over the console rather than do plaintext output?

本文关键字:输出 控制台 文本 覆盖      更新时间:2023-10-16

编辑:这是这个问题的续集。将颜色绘制到控制台会导致颜色闪烁

因此,在 C/C++ 中,像printfcout这样的命令将写入明文输出。因此,为80×25文本显示和60fps设计的视频游戏必须每帧输出2000个字符的文本。我想在屏幕上写,比如说,将字符串写入第 4 行第 9 行或其他内容的字符串,而不是每次更改时不断附加明文。我不是说图形输出,这仍然是文本模式,但不是纯文本嵌入控制台类型的文本模式。

编辑:对于那些想知道的人,输出整个纯文本屏幕的每一帧动画的代码如下所示: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("33[6;3HHellon");
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;
}

您也可以将 ncurses 库用于 POSIX。