Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
1

Изменение цвета конкретного символа текста в консоли

29.04.2018, 22:20. Просмотров 1070. Ответов 10
Метки нет (Все метки)

Мне нужно изменить цвет определенных элементов в массиве. Ну пусть для примера нужно будет изменить цвет последнего элемента.

Нашел вот такую штуку:
C++
1
system("color F0");
Но она изменяет цвет фона и текста во всей консоли. А как бы мне сделать мое задание (изменить цвет последнего элемента массива)?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2018, 22:20
Ответы с готовыми решениями:

Изменение цвета текста в консоли
Как изменить цвет только определённого текста в консоли? Например изменить цвет...

Форматирование текста и изменение цвета текста в консоли
Подскажите пожалуйста, как форматировать текст в консоли, а также как менять...

Изменение выведенного цвета в консоли
Привет всем, кто желает помочь. Такая ситуация, нужно изменить цветовые...

Изменение цвета символа в консоле
Добрый день. Интересует, возможно ли сменить цвет отдельного символа в...

Задание цвета текста в консоли на C
Как задать цвет в с ?

10
Avaddon74
144 / 144 / 62
Регистрация: 15.09.2017
Сообщений: 494
29.04.2018, 22:43 2
Лучший ответ Сообщение было отмечено BlackVoron как решение

Решение

BlackVoron,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <Windows.h>
using namespace std;
 
void SetColor(int text, int bg){
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
}
 
int main(){
    SetColor(14, 0);
    cout << "test ";
    SetColor(9, 0);
    cout << "test2\n";
    SetColor(7, 0);
 
    return 0;
}
1
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
29.04.2018, 22:45  [ТС] 3
А можешь, пожалуйста, пояснить что есть что здесь? Мне важно понять как это работает
0
Avaddon74
144 / 144 / 62
Регистрация: 15.09.2017
Сообщений: 494
29.04.2018, 22:55 4
BlackVoron, Здесь вроде всё очевидно
C++
1
2
3
4
void SetColor(int text, int bg){
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); //Получаем дескриптор вывода на консоль
    SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));  //Устанавливаем атрибуты текста
}
0
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
29.04.2018, 23:03  [ТС] 5
Спасибо)
0
Avaddon74
144 / 144 / 62
Регистрация: 15.09.2017
Сообщений: 494
29.04.2018, 23:10 6
BlackVoron, Можно ещё с манипулятором сделать, удобней использовать, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <Windows.h>
using namespace std;
 
void SetColor(int text, int bg){
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
}
 
template<int txt = 7, int bg = 0>
ostream& color(ostream &text) {
    SetColor(txt, bg);
    return text;
}
 
int main(){
    cout << color<12, 0> << "test " << color<3, 0> << "test2\n" << color;
    return 0;
}
Добавлено через 2 минуты
И тогда можно объединить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <Windows.h>
using namespace std;
 
template<int txt = 7, int bg = 0>
ostream& color(ostream &text) {
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | txt));
    return text;
}
 
int main(){
    cout << color<12, 0> << "test " << color<3, 0> << "test2\n" << color;
    return 0;
}
2
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
29.04.2018, 23:14  [ТС] 7
Ну так посложнее немного получается
0
Avaddon74
144 / 144 / 62
Регистрация: 15.09.2017
Сообщений: 494
29.04.2018, 23:28 8
BlackVoron, Так удобнее читать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <Windows.h>
using namespace std;
 
enum Colors {
    Black, Blue, Green, Cyan, Red, Magenta, Brown, LightGray,
    DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White
};
 
template<Colors txt = LightGray, Colors bg = Black>
ostream& color(ostream &text) {
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | txt));
    return text;
}
 
int main(){
    cout << color<Green, Black> << "test " << color<Red, Black> << "test2\n" << color;
    return 0;
}
1
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
30.04.2018, 00:23  [ТС] 9
Да)
Спасибо большое за внятный и развернутый ответ!

У меня только небольшая проблема с кодом. После того как я окрашиваю последний элемент массива в определенный цвет, у меня окрашивается и весь текст, который выводится при завершении работы программы.

Сам код:

C++
1
2
3
4
5
6
7
8
for (i=0; i<k; i++)
    {
        if (a[i]==a[k-1]) SetColor(2, 0);
        else SetColor(7, 0);
        
        cout<<a[i]<<'\t';
    }
    SetColor(2, 0);
0
Миниатюры
Изменение цвета конкретного символа текста в консоли  
Avaddon74
144 / 144 / 62
Регистрация: 15.09.2017
Сообщений: 494
30.04.2018, 10:50 10
BlackVoron, так атрибуты текста устанавливаются для всего последующего текста, т.е. после вывода нужного текста с нужным цветом, тебе нужно вернуть атрибуты в исходное состояние, прописать: SetColor(7, 0); в конце
1
BlackVoron
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 43
30.04.2018, 15:31  [ТС] 11
Ух е, я не тот цвет просто поставил)
Спасибо еще раз большое за помощь!)
0
30.04.2018, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2018, 15:31

Изменение цвета строки в консоли по нажатию произвольной клавиши
Не могу побороть 3 - тий пункт. Может кто поможет))) С помощью текстового...

Изменение цвета символа с использованием системного прерывания BIOS
Всем доброго времени суток помогите пожалуйста дописать программу! Мое задание...

Изменение цвета текста
Привет всем. Можно ли в консоле менять цвет ЧАСТИ текста? тоесть выделить одно...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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