Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/91: Рейтинг темы: голосов - 91, средняя оценка - 4.98
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101

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

24.05.2012, 11:38. Показов 16999. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2012, 11:38
Ответы с готовыми решениями:

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

Выделить цветом символ в консоли
Есть массив строк. Он выводится в консоль. Надо что бы обнаруживался конкретный символ и менял цвет. Допустим если надо найти все И, то...

richedit, выделить красным цветом определенный символ
Делаем по практике текстовый редактор, хочу приложить к нему тест на скорость печати. В richedit1 пользователь вводит текст, в richedit2...

10
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.05.2012, 12:50
В WriteConsoleOutputAttribute() надо передавать хэндл на Console Screen Buffer. А ты что передаешь?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
24.05.2012, 13:02
almostclever, посмотри сюда
Форматирование текста и изменение цвета текста в консоли
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
24.05.2012, 13:09
А что так можно чтоль было!!????...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
24.05.2012, 14:27
lazybiz, ты эт к чему???
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
24.05.2012, 19:11  [ТС]
-=ЮрА=-,
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
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
24.05.2012, 21:10  [ТС]
Понял свою ошибку:
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
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
26.05.2012, 20:11  [ТС]
Цитата Сообщение от 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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.05.2012, 11:37
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
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
28.05.2012, 12:24  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.05.2012, 13:49
Цитата Сообщение от almostclever Посмотреть сообщение
А зачем надо после 80 увеличивать j на +1 в вашем коде?
А строки ты как считать хочешь?Или у тебя текст любой длинны на 1 строку???
Консоль это текстовый буфер 80х40 (иногда 20)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2012, 13:49
Помогаю со студенческими работами здесь

Отобразить в форме анализируемое выражение, (текущий просматриваемый символ выделить другим цветом), а также с
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { ...

Выделить нужный текст другим цветом цветом
как выделить a,a, a другим цветом

Считать строку с клавиатуры и вывести на дисплей её 1-й символ - коричневым цветом, а 4-й символ - красным
Здравствуйте, нужна помощь с таким заданием: Единственное, что я смог слепить - это такой код, который я и сам не конца понимаю: ...

Текущий символ в консоли (символ над кареткой)
Допустим программа вывод некий текст на экран. Затем курсор (каретку) перемещаем в заданное положение на экране. Как можно узнать, какой...

Как выделить цветом?
43 22 42 49 45 41 37 40 38 42 39 48 37 42 36 37 29 32 58 41 как найти наибольшее число и выделить его цветом?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru