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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
24.05.2012, 11:38     Выделить цветом символ в консоли #1
Всем привет.
Нужно в массиве выделять другим цветом определенный символ.
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]);    
    }
Вот этот метод только смог нарыть, но не работает.
Прошу помощи, лучше на просто Си.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
24.05.2012, 12:50     Выделить цветом символ в консоли #2
В WriteConsoleOutputAttribute() надо передавать хэндл на Console Screen Buffer. А ты что передаешь?
-=ЮрА=-
Заблокирован
Автор FAQ
24.05.2012, 13:02     Выделить цветом символ в консоли #3
almostclever, посмотри сюда
Форматирование текста и изменение цвета текста в консоли
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
24.05.2012, 13:09     Выделить цветом символ в консоли #4
А что так можно чтоль было!!????...
-=ЮрА=-
Заблокирован
Автор FAQ
24.05.2012, 14:27     Выделить цветом символ в консоли #5
lazybiz, ты эт к чему???
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);
    }
вот сделал так, должно выделять по-идее цифру которая в скобках красным цветом, а получается , что другую выделяет.
Миниатюры
Выделить цветом символ в консоли  
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);
    }
Но почему выделение начинается со второго элемента?
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);
    }
Но почему выделение начинается со второго элемента?
Все еще актуально
-=ЮрА=-
Заблокирован
Автор 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);
}
Миниатюры
Выделить цветом символ в консоли  
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 в вашем коде?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 13:49     Выделить цветом символ в консоли
Еще ссылки по теме:

Выделить слова в консоли C++
Как выделить одну строку другим цветом C++
C++ Выделить цветом символы

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
28.05.2012, 13:49     Выделить цветом символ в консоли #11
Цитата Сообщение от almostclever Посмотреть сообщение
А зачем надо после 80 увеличивать j на +1 в вашем коде?
А строки ты как считать хочешь?Или у тебя текст любой длинны на 1 строку???
Консоль это текстовый буфер 80х40 (иногда 20)
Yandex
Объявления
28.05.2012, 13:49     Выделить цветом символ в консоли
Ответ Создать тему
Опции темы

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