c++ - 如何使输出文本在换行符后从控制台的左上角开始

标签 c++ windows

在阅读了为什么我不应该使用 system("CLS") 之后,我使用了 cout << string(100, '\n')清除控制台屏幕。但是,新文本将显示在控制台输出的最后一行。我该如何解决?

使用 VC++ 2012。

最佳答案

由于您显然是在为 Windows 编写代码,因此您可以使用 Windows 控制台函数,如下所示:

#include <windows.h>

void ClrScrn(int attrib, char filler = ' ') {

    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = { 0, 0};
    DWORD written;
    CONSOLE_SCREEN_BUFFER_INFO screen_attr;
    unsigned size;

    GetConsoleScreenBufferInfo(screen, &screen_attr);

    size = screen_attr.dwSize.X * screen_attr.dwSize.Y;

    FillConsoleOutputCharacter(screen, filler, size, pos, &written);
    FillConsoleOutputAttribute(screen, attrib, size, pos, &written);
    SetConsoleCursorPosition(screen, pos);
}

这允许(要求)您在参数 attrib 中指定要清除的颜色,因此用法如下:

ClrScrn(FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_BLUE);

如果您想将屏幕清除为空白以外的内容,您也可以指定一个字符来填充。例如,在蓝色背景上用深红色笑脸填充屏幕:

ClrScrn(FOREGROUND_RED | BACKGROUND_BLUE, '\1');

关于c++ - 如何使输出文本在换行符后从控制台的左上角开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666411/

相关文章:

python - 打印到控制台终端而不是 IPython Notebook 的单元格输出

Java - Swing GUI 窗口顺序

c++ - libstdc++ 已弃用;移至 libc++ [-Wdeprecated] 但更改会产生编译错误

c++ - std::transform 的最后一个参数

c++ - 如何使用可变参数模板在 C++ 中获取参数的变量号及其大小

c++ - ctors 和 setter 参数的命名约定

c++ - 在 Windows 中获取当前注册的组织名称(公司名称)

android - 在 React Native 项目中安装任何附加包后无法识别命令 `run-android`

windows - 使用 Windows 加密 API 在恒定时间内比较 2 个 secret

c++ - 用char初始化多维数组?