Цветная консоль в ANSI C? - PullRequest
6 голосов
/ 18 июля 2010

Можно ли покрасить вывод консоли просто в ANSI C?Без внешней библиотеки?Это можно сделать в Windows, Linux или Mac OS X?

Ответы [ 5 ]

7 голосов
/ 18 июля 2010

просто ANSI C?

Нет. Стандарт C не предполагает, что стандартный вывод является консолью или имеет цвет.

Можно ли это сделать в Windows, Linux или Mac OS X?

Да. См. Как я могу печатать на консоли в Mac OS X в цвете кросс-платформенным способом? для Linux и Mac OS X.

Для Windows вам может потребоваться прямой доступ к Консольным функциям , если вы хотите избежать внешних библиотек.

4 голосов
/ 18 июня 2013

Да, в Linux / Mac это возможно с использованием ANSI C89.Вы можете управлять шрифтом и цветом текста.используя следующую команду:

printf("%c[0;00mHello, world!\n", 27); /* White color     */
printf("%c[1;33mHello, world!\n", 27); /* Yellowish color */
printf("%c[1;34mHello, world!\n", 27); /* Blueish color   */

Обратите внимание, что левая часть «;»(где цифры 0, 1) манипулирует шрифтом текста, правая часть ";"манипулирует цветами.Вы можете поэкспериментировать самостоятельно и найти новые цвета.

Этот код компилируется с использованием команды "-ansi -pedantic" без предупреждений и ошибок.

***** Редактировать ***** ВВ системах на базе Windows вы можете получить красочный консольный текст / фон текста, используя следующий пример:

#include <stdio.h>
#include <windows.h>

int main(void)
{   
    /* Point to our console */
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    int i = 0;

    /* Iterate through colors */ 
    for(; i < 255; i++)
    { /* i stands for color type: could refer to actual text color or background color of text */
        SetConsoleTextAttribute(hConsole, i);
        printf("Colorful text");
    }

    getchar();
    return 0;
}

Удачи!

1 голос
/ 03 марта 2015

Linux / OSX / Unix

В системах posix вы можете использовать escape-последовательности ANSI .

Windows

В Windows это немного сложнее, есть несколько решений:

Win32 API

Использование Win32 API для установки цвета вывода перед печатью на консоль с использованием SetConsoleTextAttribute и friends . Это гораздо более обременительно, чем простое встраивание escape-последовательностей ANSI в ваши строки, и требует, чтобы вы обрабатывали Windows как особый случай.

Windows ANSI.SYS и замена

Более старая версия Windows содержала ANSI.SYS, но она была удалена в более поздних версиях. ANSICON - это замена, которую вы можете установить, чтобы получить поддержку цветового кода ANSI в командной строке Windows: https://github.com/adoxa/ansicon

Встраиваемое решение без внешних зависимостей

Вот проект, который можно легко интегрировать в любой существующий проект, не полагаясь на устанавливаемые ANSI.SYS или ANSICON.

Он принимает строку, содержащую escape-последовательности ANSI, и переводит их в соответствующие функции API-интерфейса Win32: https://github.com/mattn/ansicolor-w32.c

0 голосов
/ 18 июля 2010

Это правда, что ISO C ничего не знает о способности консоли отображать цвета, однако существует норма ANSI для управления возможностями консоли, основанная на элементах управления escape-символами. Это работает прозрачно в Linux и Mac OS X, но не в Windows, в которой вам нужно использовать примитивы Win32 API.

Ниже вы можете найти очень простую библиотеку, которая позволяет очищать экран, отображать цвета и размещать курсор в определенной координате в многоплатформенном режиме (Win32 и Unix-подобные системы).

Он поставляется с простыми исходными файлами C (.c и .h), документацией по Doxygen на испанском языке (doc /) и простой демонстрационной программой (main.c)

http://github.com/Baltasarq/cscrutil/

0 голосов
/ 18 июля 2010

в Linux это можно сделать, если вы знаете специфичные для оболочки управляющие коды / Escape-последовательности.

...