Подтвердить что ты не робот

Красочный текст с использованием printf в C

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

4b9b3361

Ответ 1

Я знаю, что это невероятно легко сделать на С++, но я нашел это для вас, чтобы посмотреть на 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;
}

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

Ответ 2

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

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

Ответ 3

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

Однако, если вы получите упорядоченные строки, тогда код вроде этого будет делать трюк (более или менее):

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, чтобы восстановить цвет. Вероятно, есть функция запроса, позволяющая вам найти текущий параметр, который вы используете, прежде чем изменять его.

Ответ 4

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