2012-01-06 2 views
11

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

+5

C не определяет цветопередачу; это зависит от особенностей терминала, который вы используете. Вероятно, есть некоторые escape-последовательности, которые вы можете распечатать, чтобы получить цветопередачу. Вам нужно будет выяснить, каковы эти escape-последовательности, а затем просто распечатать их. (Символ escape ASCII может быть представлен как '' \ x1B "'.) –

+1

Если вы можете, я предлагаю использовать C++. Это сделает жизнь таким образом намного проще. Я предполагаю, что вы делаете это для обучения, так хорошо для вас. – nmagerko

+0

@nmagerko Не могли бы вы рассказать мне, как окрасить заднюю панель консоли? спасибо :) – BugShotGG

ответ

14

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

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

+0

Все ... ну, я думал достичь этого, используя ANSI. Я должен написать себе функцию для разбора стрингов и изменения атрибутов, которые я предполагаю ... –

+0

@ TomášZato, ANSI больше не будет работать в Windows, потому что драйвер устройства 16-бит и, следовательно, несовместим с 64-битными системами (и даже не включен). – Synetech

+0

Что вы подразумеваете под «Я знаю, что это невероятно легко сделать на C++»? –

4

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

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

+0

escape seq table здесь: http://ascii-table.com/ansi-escape-sequences.php Пример: printf ("\ x1b [1m Enable_BOLD \ n \ x1b [0m") ; – Doug

2

Если вам ограничено использование только printf(), для этого требуется знание терминала, на который вы пишете. Вероятно, это терминал типа ANSI, поэтому это можно сделать. Библиотека Unix curses (Linux) обрабатывает такую ​​информацию независимым от терминала способом. В принципе, вам нужно будет определить или создать управляющие строки, чтобы включить терминал в режим 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

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

Смежные вопросы