簡體   English   中英

ANSI 轉義碼無法正常工作 [C++]

[英]ANSI escape code not working properly [C++]

我正在使用 ANSI 轉義碼來打印彩色輸出。

我在 vs 代碼集成終端中獲得了正確的彩色輸出。 在此處輸入圖像描述

但是當我在外部命令提示符/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM