Форум программистов, компьютерный форум CyberForum.ru

Форматирование текста и изменение цвета текста в консоли - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 125, средняя оценка - 4.95
Djulbars
 Аватар для Djulbars
24 / 4 / 2
Регистрация: 19.08.2011
Сообщений: 62
13.09.2011, 10:40     Форматирование текста и изменение цвета текста в консоли #1
Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 10:40     Форматирование текста и изменение цвета текста в консоли
Посмотрите здесь:

C++ Изменение цвета текста и фона при консольном выводе
Изменение цвета текста и фона в консольном приложении C++
C++ Задание цвета текста в консоли на C
Изменение выведенного цвета в консоли C++
Изменение цвета текста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
13.09.2011, 10:54     Форматирование текста и изменение цвета текста в консоли #2
Флаги форматирования и манипуляторы
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 12:35     Форматирование текста и изменение цвета текста в консоли #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Dani,
Цитата Сообщение от Dani Посмотреть сообщение
Флаги форматирования и манипуляторы
- это не совсем то
Цитата Сообщение от Djulbars Посмотреть сообщение
менять его цвет
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>//
#include <stdio.h>  //i/o
 
int main()
{
    HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
    
/*  FillConsoleOutputCharacter(hOutput, ' ',
    SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y, POS, NULL);*/
    FillConsoleOutputAttribute(hSTDOut, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
    
    //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
    SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
 
    char str[] = "Example whitch shows graphical compabilitest of console fonts";
    int sLen = strlen(str);
    WORD wColour = FOREGROUND_RED;
    for(int i = 0,k = 0; i < sLen; i++, k++)
    {
        if(k == 0)
            wColour = FOREGROUND_RED;
        if(k == 1)
            wColour = FOREGROUND_GREEN;
        if(k == 2)
        {
            wColour = FOREGROUND_BLUE;
            k = 0;
        }
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
        printf("%c",str[i]);
    }
    SetConsoleTextAttribute(hSTDOut,
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    printf("\r\n");
    system("pause");
    return 0;
}
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 12:52     Форматирование текста и изменение цвета текста в консоли #4
Добавлю также, что манипуляторы для С++ есть ещё флаги форматирования
\t - перевод табулятора
\r - перевод курсора вначало
\n - перевод курсора на новую строку
Возможно форматиование прямой установкой курсора SetConsoleCursorPosition
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 13:09     Форматирование текста и изменение цвета текста в консоли #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Возможно форматиование прямой установкой курсора SetConsoleCursorPosition
- чтобы было понятно о возможностях установки курсора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int main()
{
    HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
    FillConsoleOutputAttribute(hSTDOut, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
    
    //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
    SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
 
    int X0 = SCRN_INFO.dwCursorPosition.X;
    int Y0 = SCRN_INFO.dwCursorPosition.Y;
 
    char str[] = "Example whitch shows graphical compabilitest of console fonts";
    int sLen = strlen(str);
    WORD wColour = FOREGROUND_RED;
    for(int i = 0,k = 1; i < sLen; i++, k++)
    {
        if(k == 1)
            wColour = FOREGROUND_RED;
        if(k == 2)
            wColour = FOREGROUND_GREEN;
        if(k == 3)
        {
            wColour = FOREGROUND_BLUE;
            k = 0;
        }
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
        SCRN_INFO.dwCursorPosition.Y = Y0 + 2 - k;
        SCRN_INFO.dwCursorPosition.X = X0 + i;
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        
        printf("%c",str[i]);
        
    }
    SetConsoleTextAttribute(hSTDOut,
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
    SCRN_INFO.dwCursorPosition.Y = Y0 + 2;
        SCRN_INFO.dwCursorPosition.X = X0 + i;
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
    printf("\r\n");
    system("pause");
    return 0;
}
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
12.02.2012, 14:31     Форматирование текста и изменение цвета текста в консоли #6
-=ЮрА=- у меня ваш код не работает, сначала компилятор ругался на переменную i что она не определена я ее определил, теперь компиляция без ошибок, но программа не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <windows.h>//
#include <stdio.h>  //i/o
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
        HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
        GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
        FillConsoleOutputAttribute(hSTDOut, 
                FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
                SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,SCRN_INFO.dwCursorPosition,NULL);
 
        
        //Можно управлять курсором если поменять параметры в SCRN_INFO.dwCursorPosition ;)
        SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        int i;
        int X0 = SCRN_INFO.dwCursorPosition.X;
        int Y0 = SCRN_INFO.dwCursorPosition.Y;
 
        char str[] = "Example whitch shows graphical compabilitest of console fonts";
        int sLen = strlen(str);
        WORD wColour = FOREGROUND_RED;
        for(int i = 0,k = 1; i < sLen; i++, k++)
        {
                if(k == 1)
                        wColour = FOREGROUND_RED;
                if(k == 2)
                        wColour = FOREGROUND_GREEN;
                if(k == 3)
                {
                        wColour = FOREGROUND_BLUE;
                        k = 0;
                }
                SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
                SCRN_INFO.dwCursorPosition.Y = Y0 + 2 - k;
                SCRN_INFO.dwCursorPosition.X = X0 + i;
                SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
                
                printf("%c",str[i]);
                
        }
        SetConsoleTextAttribute(hSTDOut,
                FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
        SCRN_INFO.dwCursorPosition.Y = Y0 + 2;
                SCRN_INFO.dwCursorPosition.X = X0 + i;
                SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
        printf("\r\n");
        system("pause");
        return 0;
}
Подскажите пожалуйста в чем ошибка??????
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 14:55     Форматирование текста и изменение цвета текста в консоли #7
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста в чем ошибка??????
- возможно в неверной настройке проекта, у меня всё работает, прикладываю аттачем рабочий проект
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Вложения
Тип файла: rar ColorConsole_VS9_proj.rar (4.5 Кб, 85 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 15:05     Форматирование текста и изменение цвета текста в консоли #8
isaak, я наконец-то понял в чём дело
Цитата Сообщение от isaak Посмотреть сообщение
int i;
Цитата Сообщение от isaak Посмотреть сообщение
for(int i = 0,k = 1; i < sLen; i++, k++)
Проект разрабатывал в VS6.0 и там компилятор понимает такое объявление i и k, как если бы их объявили до цикла
for(int i = 0,k = 1; i < sLen; i++, k++)
В новых компиляторах твоё объявление дало 2 независимых одна от одной переменных i в итоге вместо того чтобы после отработки цикла for(int i = 0,k = 1; i приняло значение sLen, сюда
Цитата Сообщение от isaak Посмотреть сообщение
SCRN_INFO.dwCursorPosition.X = X0 + i;
передавалось значение
Цитата Сообщение от isaak Посмотреть сообщение
int i;
- верней неинициализированную переменную i, которая могла иметь любое значение и понятное дело большее чем 80(макс ширина символьных единиц консоли), вот и опрокидывалась здесь программа
Цитата Сообщение от isaak Посмотреть сообщение
SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
12.02.2012, 15:15     Форматирование текста и изменение цвета текста в консоли #9
я создаю проект Empty project -> Add New Item ->C++File(.cpp) какие еще нужно сделать настройки в проекте подскажите пожалуйста? -=ЮрА=- я загрузил ваш проект к себе компиляция прошла без ошибок, но при запуске программа также завершается с ошибкой. Не знаю че делать????
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 17:52     Форматирование текста и изменение цвета текста в консоли #10
isaak, действительно странно!Ниже рабочий exe, собранный по коду из 7-го поста, у меня отрабатывает без проблемм, если при его работе на твоём компьютере проявится таже ошибка, то возможно причина и не в коде, а в каком то "кривом" системном файле либо DLL.
Жду результатов теста, чесн слово пока сам в затруднении сказать что к чему
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
Вложения
Тип файла: rar ColorConsole.exe.rar (27.6 Кб, 113 просмотров)
-=ЮрА=-
12.02.2012, 18:00
  #11

Не по теме:

PS:У меня есть подозрение, что причина может крыться в сбойном dotnetfx3.5 (Net FrameWork) DLL которой по умолчанию исользует студия.В прошлом у меня возникала похожая проблемма с DirectX, при работе одного из моих приложений "вылезал синий єкран смерти XP".
Я долго ломал голову а потом переустановил DirectX и больше проблемм не возникало, ИМХО у тебя такая же ситуация.

Как последний вариант попробуй выставить при создании более низкую версию Net FrameWork, например 2.0 - по ссылке пост который поясняет как это сделать
Ошибка при компиляции любой программы
ссылка на скрин здесь

isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
12.02.2012, 18:59     Форматирование текста и изменение цвета текста в консоли #12
-=ЮрА=- спасибо за ответ, запустил ваш ColorConsole.exe, таже самая ситуация у меня ОС 7 максималка, VS 2010.

Добавлено через 31 минуту
при создании выставил низкую версию Net FrameWork 2.0, проблема осталась также, а где искать этот кривой DLL у меня стоят версии Net FrameWork 2.0, 3.5, 4.0, 4.5. Не уш то все снасить и все устанавливать заново, по реестру вычищать пока не умею, все сносить и заново Ос ставить. Подскажите пожалуйста что-нибудь еще.
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 19:03     Форматирование текста и изменение цвета текста в консоли #13
Цитата Сообщение от isaak Посмотреть сообщение
запустил ваш ColorConsole.exe, таже самая ситуация у меня ОС 7 максималка, VS 2010.
- тогда скорее всего нелады с DLL-ками либо конфигами в системе, тут я наверное буду бессиленМогу лишь предложить ещё попробовать запустить программу в безопасном режиме, если отработает то на 100% можно говорить о кривизне системных файлов и настроек...

Добавлено через 1 минуту
Цитата Сообщение от isaak Посмотреть сообщение
Не уш то все снасить и все устанавливать заново, по реестру вычищать пока не умею, все сносить и заново Ос ставить. Подскажите пожалуйста что-нибудь еще.
- тогда нужно локализовать баг -isaak, с отладчиком VisualStudio умеете работать???

Добавлено через 1 минуту
Нет нет ничего сносить не надо - нужно понять какая строка кода приводит к исключению
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
12.02.2012, 19:20     Форматирование текста и изменение цвета текста в консоли #14
Я запустил Отладчик он мне выдал сообщение я так ни че и не понел
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 19:34     Форматирование текста и изменение цвета текста в консоли #15
Хм в самом начале, тогда предлагаю сделать так
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
ZeroMemory(&SCRN_INFO, sizeof(SCRN_INFO));
GetConsoleScreenBufferInfo(hSTDOut, &SCRN_INFO);
Добавлено через 3 минуты
Правда странно
isaak, а можешь выложить свой проект с настройками???Удали только ProgramIntallagence DataBase и папки Debug и Release и пришли архив, думаю данная ошибка обуслвленна не совсем подходящми настройками проекта....
Миниатюры
Форматирование текста и изменение цвета текста в консоли  
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
12.02.2012, 20:44     Форматирование текста и изменение цвета текста в консоли #16
-=ЮрА=- вот мой проект я ни че ни удалял, штоб еще хуже не сделать, посмотрите пожалуйста если будет время. за ранее огромное спасибо.
Вложения
Тип файла: zip ColorConsole.zip (488.4 Кб, 12 просмотров)
-=ЮрА=-
12.02.2012, 22:55
  #17

Не по теме:

Цитата Сообщение от isaak Посмотреть сообщение
-=ЮрА=- вот мой проект я ни че ни удалял, штоб еще хуже не сделать, посмотрите пожалуйста если будет время. за ранее огромное спасибо.
-
isaak, что то не в порядке с архивом(см скрин), да и маловат он для полного проекта

isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
13.02.2012, 20:33     Форматирование текста и изменение цвета текста в консоли #18
-=ЮрА=- вчера время не было, сегодня выложил архив, если будет время посмотрите пожалуйста. Заранее огромное спасибо.
Вложения
Тип файла: rar ColorConsole.rar (8.15 Мб, 13 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
13.02.2012, 22:49     Форматирование текста и изменение цвета текста в консоли #19
Цитата Сообщение от isaak Посмотреть сообщение
-=ЮрА=- вчера время не было, сегодня выложил архив, если будет время посмотрите пожалуйста. Заранее огромное спасибо.
- я забыл сообщить что у меня лишь 2008-ая студия, 10-ки нет, поэтому могу лишь догадываться
Первое что бросается в глаза так это вот что

Цитата Сообщение от isaak Посмотреть сообщение
#include <windows.h>//
#include <stdio.h> //i/o
#include <iostream>
#include <iomanip>
using namespace std;
- т.е пишешь новый стиль заголовков параллельно используя старый, всё ничего но ещё и std используем вместе с С-шным потоком вывода, а ведь вывод на экран у нас такой
Цитата Сообщение от isaak Посмотреть сообщение
SetConsoleCursorPosition(hSTDOut,SCRN_INFO.dwCursorPosition);
printf("%c",str[i]);
}
- возможно смсь С/С++ и приводит к ошибке

Сразу скажу что на 9-ке отработал и С/с++ смесь стилей хдеров, причём без предупреждений или неожиданных исклюючений. Прикрепляю рабочий проект в 9-ке 1 к 1-му по коду из архива. Если будет выскакивать ошибка то сперва уберём из хедером то что окрашено красным, (т.е пишем их как изначально было у меня по коду
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <windows.h>//
#include <stdio.h> *//i/o
int main()
{
,а там посмотрим будет ли вновь появляться ошибка или же в этом и было всё дело...
Жду результатов теста!
Вложения
Тип файла: rar ColorConsole_VS9_proj.rar (4.1 Кб, 20 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 21:40     Форматирование текста и изменение цвета текста в консоли
Еще ссылки по теме:

C++ Форматирование текста
Изменение размера текста в консоли C++
C++ Изменение цвета текста в консоли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
14.02.2012, 21:40     Форматирование текста и изменение цвета текста в консоли #20
Доброго время суток -=ЮрА=-, спасибо за ответ запускал ваши проект двумя способами как вы советуете, но к сожалению проблема осталась.
Миниатюры
Форматирование текста и изменение цвета текста в консоли   Форматирование текста и изменение цвета текста в консоли  
Yandex
Объявления
14.02.2012, 21:40     Форматирование текста и изменение цвета текста в консоли
Ответ Создать тему
Опции темы

Текущее время: 03:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru