[英]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.