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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
#1

Выделить цветом символ в консоли - C++

24.05.2012, 11:38. Просмотров 4390. Ответов 10
Метки нет (Все метки)

Всем привет.
Нужно в массиве выделять другим цветом определенный символ.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum COLOR {BLUE = 9, GREEN, TURQUOISE, RED, VIOLET, YELLOW};    
void textcolor(int x, int y, WORD color)
{
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD  coord  = {x, y};
    WriteConsoleOutputAttribute(stdOut, &color , 1, coord, NULL);
}
for (g=0;g<n;++g)
    {
        if(g==i)
        {
        textcolor(g, 1, RED);
        printf("[%d] ",a[g]);
      
        }
        else
        printf("%d ",a[g]);    
    }
Вот этот метод только смог нарыть, но не работает.
Прошу помощи, лучше на просто Си.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 11:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделить цветом символ в консоли (C++):

Выделить в массиве число выделить его каким-нибудь цветом - C++
Выделить минимальное и максимальное значение в массиве каким-нибудь цветом отличающимся от остальных элементов массива.Вывести массив на...

Выделить цветом символы - C++
Здравствуйте. Подскажите как можно выделить цветом определённые символы в тексте после того как он уже напечатан?

Управление текстом и цветом к консоли - C++
Добрый вечер! Интересуют 2 вопроса: 1) Как в консоли оформить шапку (большие буквы вверху)? 2) Как изменить цвет фона и текста? ...

Работа с файлами и цветом в консоли - C++
всем привет ..есть задание..проблема с первым пунктом,а точнее с его отображением в консоли как вывести так как есть в файле? и по...

Помогите разобраться с цветом в консоли - C++
Скажите пожалуйста как в этой программе сделать так, чтобы в строке cin &gt;&gt; calc; можно вводить цифры белым цветом а не зеленым при этом не...

Как выделить одну строку другим цветом - C++
Не судите строго, второй день изучаю С++. Прочитал много тем, нашел несколько подходящих тем, но там всё равно не то. В общем мне нужно,...

10
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.05.2012, 12:50 #2
В WriteConsoleOutputAttribute() надо передавать хэндл на Console Screen Buffer. А ты что передаешь?
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.05.2012, 13:02 #3
almostclever, посмотри сюда
Форматирование текста и изменение цвета текста в консоли
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.05.2012, 13:09 #4
А что так можно чтоль было!!????...
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.05.2012, 14:27 #5
lazybiz, ты эт к чему???
0
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
24.05.2012, 19:11  [ТС] #6
-=ЮрА=-,
C
1
2
3
4
5
6
7
8
9
10
11
12
for (g=0;g<n;++g)
    {
        if(g==i)
        {          
        wColour = FOREGROUND_RED;        
        printf("[%d] ",a[g]);
        }
        else
        wColour = FOREGROUND_BLUE;
        printf("%d ",a[g]); 
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
    }
вот сделал так, должно выделять по-идее цифру которая в скобках красным цветом, а получается , что другую выделяет.
0
Миниатюры
Выделить цветом символ в консоли  
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
24.05.2012, 21:10  [ТС] #7
Понял свою ошибку:
C
1
2
3
4
5
6
7
8
9
10
11
for (g=0;g<n;++g)
    {
        if(g==0)
        {          
        wColour = FOREGROUND_RED;        
        }
        else
        wColour = FOREGROUND_BLUE;
        printf("%d ",a[g]); 
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
    }
Но почему выделение начинается со второго элемента?
0
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
26.05.2012, 20:11  [ТС] #8
Цитата Сообщение от almostclever Посмотреть сообщение
Понял свою ошибку:
C
1
2
3
4
5
6
7
8
9
10
11
for (g=0;g<n;++g)
    {
        if(g==0)
        {          
        wColour = FOREGROUND_RED;        
        }
        else
        wColour = FOREGROUND_BLUE;
        printf("%d ",a[g]); 
        SetConsoleTextAttribute(hSTDOut,wColour|FOREGROUND_INTENSITY);
    }
Но почему выделение начинается со второго элемента?
Все еще актуально
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.05.2012, 11:37 #9
almostclever, вот я подправил твой проект, суть в том что textcolor нужно использовать после того как пропечатли символ а не до него
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
#include <windows.h>//
#include <stdio.h>  //i/o
 
#define RED 12
#define GRN 10
#define BLU 9
 
void textcolor(int x, int y, WORD color);
 
int main()
{
    char sMSG[] = "This is sample";
    long i, j, pos = 0;
    printf("%s\n",sMSG);
    printf("Enter index which color made red : ");
    scanf("%d",&pos);
    for (j = 2,(i = 0); sMSG[i] != '\0'; i = i + 1)
    {
        printf("%c",sMSG[i]); //ГЌГ*ГЇГҐГ·Г*ГІГ*ëè ñèìâîë ГІГҐГЄГіГ№ГЁГ¬ öâåòîì
        if(i == pos)//ÏîñòГ*âèëè öâåò
            textcolor(i, j, RED);
        if(i == 80)
            j = j + 1;
    }
    printf("\n");
    system("pause");
    return 0;
}
 
void textcolor(int x, int y, WORD color)
{
    COORD  coord   = {x, y};
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteConsoleOutputAttribute(stdOut, &color , sizeof(char), coord, NULL);
}
0
Миниатюры
Выделить цветом символ в консоли  
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
28.05.2012, 12:24  [ТС] #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
almostclever, вот я подправил твой проект, суть в том что textcolor нужно использовать после того как пропечатли символ а не до него
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
#include <windows.h>//
#include <stdio.h>  //i/o
 
#define RED 12
#define GRN 10
#define BLU 9
 
void textcolor(int x, int y, WORD color);
 
int main()
{
    char sMSG[] = "This is sample";
    long i, j, pos = 0;
    printf("%s\n",sMSG);
    printf("Enter index which color made red : ");
    scanf("%d",&pos);
    for (j = 2,(i = 0); sMSG[i] != '\0'; i = i + 1)
    {
        printf("%c",sMSG[i]); //ГЌГ*ГЇГҐГ·Г*ГІГ*ëè ñèìâîë ГІГҐГЄГіГ№ГЁГ¬ öâåòîì
        if(i == pos)//ÏîñòГ*âèëè öâåò
            textcolor(i, j, RED);
        if(i == 80)
            j = j + 1;
    }
    printf("\n");
    system("pause");
    return 0;
}
 
void textcolor(int x, int y, WORD color)
{
    COORD  coord   = {x, y};
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteConsoleOutputAttribute(stdOut, &color , sizeof(char), coord, NULL);
}
не работает:
C
1
2
3
4
5
6
7
for (g=0;g<n;++g)
    {printf("%d ",a[g]);
        if(g==i)
        { 
               textcolor(g, 2, RED);
               }        
    }
А зачем надо после 80 увеличивать j на +1 в вашем коде?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.05.2012, 13:49 #11
Цитата Сообщение от almostclever Посмотреть сообщение
А зачем надо после 80 увеличивать j на +1 в вашем коде?
А строки ты как считать хочешь?Или у тебя текст любой длинны на 1 строку???
Консоль это текстовый буфер 80х40 (иногда 20)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 13:49
Привет! Вот еще темы с ответами:

Закрасить текст определённым цветом в консоли - C++
Привет, подскажыте пожалуста как можно закрасить текст, при чем мне нужно например штобы 1 рядок был одним кольором второй вторим. ...

Выделить цветом и подсчитать слова, содержащие среднюю букву – гласную - C++
Разработать программу считывающую из заранее созданного текстового файла фрагмент текста объемом 300 - 400 символов, содержащий буквы...

Дана строка символов. Выделить в ней цветом все символы - C++
Прошу помочь создать данную программу: Дана строка символов. Выделить в ней цветом все символы, не являющиеся буквами.

Выделить слова в консоли - C++
Нужно найти в тексте максимальную последоватеьность пробелов, идущих подряд, вывести на экран весь этот текст и при нажатии любой клавиши...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
28.05.2012, 13:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru