[英]ANSI escape code not working properly [C++]
我正在使用 ANSI 转义码来打印彩色输出。
但是当我在外部命令提示符/Powershell 中运行程序时,我没有得到预期的彩色输出。
我的程序看起来像这样:
#define RESET "\033[0m"
#define RED "\x1B[31m"
#define GREEN "\x1B[32m"
int main(int argc, char** argv){
if(argc != 1){
std::cout << RED ">> Invalid Arguments!" RESET;
}else{
if(verify_password()){
...
...
...
}else{
std::cout << "\n>> " RED "Invalid Password!" RESET;
}
}
return 0;
}
注意:我观察到的一件奇怪的事情是,如果我输入了正确的密码,那么两个终端中的一切都正常(获得正确的颜色)。 但问题是当我输入错误的密码或无效数量的参数时
这可能是什么原因?
编辑:我想出了一种让它工作的方法。 我发现为了使这些转义码起作用,我需要至少调用一次system()
函数。 但是,我仍然不确定这些东西是如何联系起来的。
从历史上看,Windows 上的控制台需要使用 Windows SDK 中的控制台 API才能执行颜色等效果。 但是最近的 Windows 版本现在支持转义码(甚至 UTF-8),但程序必须通过调用SetConsoleMode 和 ENABLE_VIRTUAL_TERMINAL_PROCESSING来选择加入。 (选择加入可以为不使用转义码或 UTF-8 的旧程序保留向后兼容性。)
如果您在某些地方而不是其他地方获得颜色,那么我猜想存在与发送转义码时终端/控制台所处状态有关的问题。 例如,如果终端认为它已经在处理一个转义码并且开始一个新的转义码,它也可能无法识别。 我想如果程序的一部分使用转义码但另一部分使用控制台 API,这也可能是一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.