красочный текст с использованием printf в C - PullRequest
15 голосов
/ 07 января 2012

Мне было интересно, как я могу напечатать в консоли цветной текст? Я использую затмение Win64 OS. Это связано с компилятором? Может ли кто-нибудь привести простой пример на языке C с текстом «Здравствуй, мир» красного или любого другого цвета?

Ответы [ 4 ]

18 голосов
/ 07 января 2012

Я знаю, что это невероятно легко сделать в C ++, но я нашел это для вас, чтобы посмотреть в C:

#include <stdio.h>
#include <windows.h>   // WinApi header

int main()
{
  HANDLE  hConsole;
    int k;

  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  // you can loop k higher to see more color choices
  for(k = 1; k < 255; k++)
  {
    SetConsoleTextAttribute(hConsole, k);
    printf("%3d  %s\n", k, "I want to be nice today!");
  }

  getchar();  // wait
  return 0;
}

Все комментарии помогут вам разобраться в коде- надеюсь, это поможет!

5 голосов
/ 07 января 2012

Если вы хотите напечатать цветной текст в консоли Windows, вам придется использовать Windows API.Поддержка ANSI.sys больше не присутствует в Windows.

В Linux вы все еще можете использовать escape-последовательности ANSI для окрашивания текста.

2 голосов
/ 07 января 2012

Если вы ограничены использованием только printf(), это требует знания терминала, в который вы пишете. Скорее всего, это терминал в стиле ANSI, так что это может быть сделано. Библиотека Unix curses (Linux ncurses) обрабатывает такую ​​информацию независимо от терминала. По сути, вам нужно определить или изготовить управляющие строки, чтобы перевести терминал в режим red, а затем снова сбросить его (но как узнать, в каком состоянии он находился до того, как перешел на красный текст?). Упомянутые библиотеки отслеживают информацию о состоянии, среди многих других деталей.

Однако, если вы организуете строки, то такой код поможет (более или менее):

static const char to_red[] = "\033...";
static const char to_black[] = "\033...";

printf("%s%s%s\n", to_red, "hello world", to_black);

Сложная часть - это определение того, что входит в константы строк (которые на самом деле не должны быть постоянными).

Все это означает, что, вероятно, существует специфичный для Windows интерфейс, который можно использовать для выполнения работы, но на самом деле это не включает printf() для управления цветами; Вы вызываете Windows API для установки цвета, затем пишете с помощью printf(), а затем снова вызываете API для восстановления цвета. Вероятно, существует функция запроса, позволяющая вам найти текущий параметр, который вы используете перед его изменением.

0 голосов
/ 07 января 2012

Консоль в Java использует стандартный вывод, который является любой операционной системой, на которой вы работаете.Для Windows вам потребуется доступ к Console API , чтобы изменить цвета.Для Linux или Mac консоль может поддерживать escape-последовательности ANSI , которые могут изменять цвета консоли через стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...