繁体   English   中英

如何使用 C++ 清除 Windows NT 命令提示符中 cursor 右侧的控制台?

[英]How can I clear console to the right of the cursor in Windows NT command prompt with C++?

我需要在同一行上输入 output,如下所示:

std::cout << "\rIt's " << leisure << " time!";

我想确保我看不到time!e! 如果leisure的下一个值更短,则在行尾。 \t不会覆盖符号(如果从 cmd 运行),所以我仍然看到time!e! . \033[0KVT 100转义序列,不受 Windows NT 支持。 解决问题并使其尽可能跨平台的最佳方法是什么?

我想避免对单行终止符进行额外编码,但由于似乎没有其他解决方案,我按照评论中的建议求助于控制台虚拟终端序列

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <string>


static const bool enable_VT_mode(void) {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE) return false;

    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode)) return false;

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode)) return false;

    return true;
}


const std::string get_terminator(void) noexcept {
    if (enable_VT_mode()) return "\x1b[0K";
    else return "                        ";
}

然后 go 这样:

static const std::string terminator = get_terminator();

std::cout << "\rIt's " << leisure << " time!" << terminator;

按照建议,我添加了WIN32_LEAN_AND_MEAN以从windows.h中排除不必要的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM