Как сделать цветовые коды ansi

Проблема в том, что когда я набрал

printf("\033[1;32mHello World\033[0m");

печатает что-то вроде этого

[1;32mHello World[0m 

в консоли. Мой код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(){

    printf("\033[1;32mHello World\033[0m");

    _getch();
    return 0;
}

он отображает:

a box with a question mark inside->[1;32mHello World[0m

но должен быть цвет текста зеленого цвета Hello World.


person Nikki Gonzales    schedule 02.01.2019    source источник
comment
Это связано с тем, что используемый вами терминал не поддерживает цветовое кодирование VT100.   -  person Havenard    schedule 03.01.2019
comment
хорошо, но почему, когда я устанавливаю заголовочный файл и набираю то же самое в заголовочном файле, он работает, я так запутался прямо сейчас   -  person Nikki Gonzales    schedule 03.01.2019
comment
Что вы подразумеваете под установкой заголовочного файла?   -  person tadman    schedule 03.01.2019
comment
Кстати, этот код, за вычетом _getch() и #include <conio.h>, зависящих от платформы, у меня работает. Убедитесь, что вы запускаете это на терминале, совместимом с ANSI. Окно вывода вашего компилятора, вероятно, неправильно интерпретирует символы ANSI, и оболочка, в которой вы находитесь, может не должен быть настроен на включение цветов.   -  person tadman    schedule 03.01.2019
comment
Возможно, cat в Windows выполняет обработку цвета, потому что знает, что терминал этого не сделает.   -  person Havenard    schedule 03.01.2019
comment
установить заголовочный файл, я имею в виду, что я также включаю другой заголовочный файл в свой основной класс и набираю код в моей созданной функции и просто вызываю свою функцию в основной класс, и по какой-то причине это сработало ...... пример: #include Header Files/Hello.h‹----- внутри этого файла .h есть функция, в которой я печатаю приветственный мир с цветовой кодировкой   -  person Nikki Gonzales    schedule 03.01.2019
comment
и кстати спасибо за вашу помощь   -  person Nikki Gonzales    schedule 03.01.2019
comment
main() не является классом, это определенная функция типа int, предусмотренная стандартом C для размещенных сред, и может быть определена реализацией для автономных (встроенных) систем. Какую версию винды вы используете? Используется ли терминал после включения заголовка, который создает зеленый текст, тот же самый, что и без заголовка (что не имеет никакого смысла). Дайте нам знать. Тестирование в оболочке в Linux, printf "\033[1;32mHello World\n\033[0m" работает отлично.   -  person David C. Rankin    schedule 03.01.2019


Ответы (1)


Может быть, таким образом:

HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode = 0;
GetConsoleMode(hStdout, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hStdout, dwMode);
printf("\033[1;32mHello World\033[0m");

Вам необходимо инициализировать соответствующий режим консоли Windows.

person stansy    schedule 10.01.2019