Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41

Как сделать разные символы разных цветов [C++]

22.01.2012, 01:55. Показов 3884. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте!
Мне нужно, чтобы на экран выводились символы разных цветов.
Отрывок из кода :
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
tt:
            switch(color)
            {
                case 1:
            {
                a++;
                system("color 0C");
                color=2;
                break;
            }
                case 2:
            {
                a++;
                system("color 0E");
                color=1;
                break;
            }
            }
            cout<<"a";
            if(a<11)
            {
            goto tt;
            }
            while(getch()!=32);
Но таким образом system("color ") меняет цвет сразу всех символов.
Как сделать так, чтобы выводились символы разных цветов?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2012, 01:55
Ответы с готовыми решениями:

Управление RGB светодиодом - разные Vf у разных цветов.
Уважаемые формучане, оцените реализацию задачи! Нужно рулить одним трехваттным RGB светодиодом со следующими особенностями: ...

Как сделать маргающий текст из 2х разных цветов
Нужно сделать маргающий текст с периодом в 0.5 сек из красного и синего цветов, говорят на это способен css?

Как сделать на одной странице ссылки разных цветов?
Т.е. например сверху страницы ссылки синие, снизу - красные и т.п.

4
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
22.01.2012, 02:08
Если винда то:
http://msdn.microsoft.com/en-u... s.85).aspx
http://msdn.microsoft.com/en-u... attributes

вот файлики писал когда-то. попробуйте заюзать:

ConsoleGUI.h
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
#ifndef _CONSOLE_GUI_H_
#define _CONSOLE_GUI_H_
 
typedef unsigned Coord;
 
struct Point
{
  Coord x;
  Coord y;
 
  explicit Point(Coord x_ = 0, Coord y_ = 0)
    : x(x_)
    , y(y_)
  {
  }
};
 
enum Color
{
  RED_COLOR   = 0x0C,
  GREEN_COLOR = 0x0A,
  BLUE_COLOR  = 0x09,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,
  BLACK_COLOR = 0x00
};
 
void gotoxy(Coord x, Coord y);
void gotoxy(const Point& p);
void clrscr(Coord x, Coord y, unsigned width, unsigned height, Color bkgnColor = BLACK_COLOR);
Color gettextcolor();
Color settextcolor(Color color);
Color getbkcolor();
Color setbkcolor(Color color);
 
#endif
ConsoleGUI.cpp
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include <string>
#include <iostream>
#include "ConsoleGUI.h"
 
using namespace std;
 
namespace
{
  typedef WORD Attr;
 
  HANDLE GetConsoleHandle()
  {
    return GetStdHandle(STD_OUTPUT_HANDLE);
  }
 
  // Глобальные объекты - это очень плохо.
  // Но в данном случае это самый простой способ.
  // Эти переменные хранят текущие цвета текста
  // и фона соответственно.
  Color g_currentTextColor = WHITE_COLOR;
  Color g_currentBkColor = BLACK_COLOR;
 
} // namespace
 
 
void clrscr(Coord x, Coord y, unsigned width, unsigned height, Color bkgnColor)
{
  const Color prev = setbkcolor(bkgnColor);
  const string str(width, ' ');
  for (unsigned i = 0; i < height; ++i, ++y)
  {
    gotoxy(x, y);
    cout << str;
  }
  setbkcolor(prev);
}
 
void gotoxy(const Point& p)
{
  gotoxy(p.x, p.y);
}
 
void gotoxy(Coord x, Coord y)
{
  COORD coord = { static_cast<SHORT>(x), static_cast<SHORT>(y) };
  SetConsoleCursorPosition(GetConsoleHandle(), coord);
}
 
Color gettextcolor()
{
  return g_currentTextColor;
}
 
Color settextcolor(Color c)
{
  const Color prev = gettextcolor();
  Attr attr = static_cast<Attr>(getbkcolor());
  attr <<= 4;
  attr |= static_cast<Attr>(c);
  if (SetConsoleTextAttribute(GetConsoleHandle(), attr))
    g_currentTextColor = c;
  return prev;
}
 
Color getbkcolor()
{
  return g_currentBkColor;
}
 
Color setbkcolor(Color c)
{
  const Color prev = getbkcolor();
  Attr attr = static_cast<Attr>(c);
  attr <<= 4;
  attr |= static_cast<Attr>(gettextcolor());
  if (SetConsoleTextAttribute(GetConsoleHandle(), attr))
    g_currentBkColor = c;
  return prev;
}
1
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
22.01.2012, 02:20  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
вот файлики писал когда-то. попробуйте заюзать:
Огромнейшее вам спасибо!
Всё работает!
***
Еще вопрос, а как ввести новые цвета?
Добавляем в enum, например, BROWN_COLOR, а что надо писать после знака равно?
***
Сам нашел, вот тут : http://www.brackeen.com/vga/basics.html
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
22.01.2012, 02:37
там похоже только 16 цветов поддерживается. от нуля до 15. Если все именовать не хочется, а просто с числами из кода вызывать то можете вот так сделать

C++
1
2
3
4
5
6
7
8
9
10
11
typedef unsigned Color;
 
enum
{
  RED_COLOR   = 0x0C,
  GREEN_COLOR = 0x0A,
  BLUE_COLOR  = 0x09,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,
  BLACK_COLOR = 0x00
};
после этого вызов
C++
1
settextcolor(9);
будет компилироваться. Вроочем енум я специально заводил, чтобы неименованные (читай не проверенные) константы просто так в коде нельзя было использовать.
0
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
22.01.2012, 02:40  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
там похоже только 16 цветов поддерживается. от нуля до 15. Если все именовать не хочется, а просто с числами из кода вызывать то можете вот так сделать
Мне вполне хватит 16, я пишу ультра-олдскульную игру
Сейчас проименую все 16 цветов в enum, и будет всё отлично.
***
Вот :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
enum Color
{
  BLACK_COLOR = 0x00,
  BLUE_COLOR  = 0x01,
  GREEN_COLOR = 0x02,
  CYAN_COLOR = 0x03,
  RED_COLOR   = 0x04,
  MAGENTA_COLOR = 0x05,
  BROWN_COLOR = 0x06,
  LGRAY_COLOR = 0x07,
  DGRAY_COLOR = 0x08,
  LBLUE_COLOR = 0x09,
  LGREEN_COLOR = 0x0A,
  LCYAN_COLOR = 0x0B,
  LRED_COLOR = 0x0C,
  LMAGENTA_COLOR = 0x0D,
  YELLOW_COLOR = 0x0E,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,  
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2012, 02:40
Помогаю со студенческими работами здесь

Есть н цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит пользователь
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит...

Как в форме на разных записях сделать разные кнопки
Здравствуйте! Имеется форма с 5 разными записями. как на каждой записи установить различные кнопки? заранее спасибо

Как сделать разные шаблоны для разных браузеров?
привет не нашёл подходящей темы куда бы запостить тако вопрос. у меня такие вот требования: 1. я хочу чтобы мой сайт хорошо...

Как сделать чтобы 2 разных цвета тянулись в разные стороны на одном уровне
Как сделать чтобы 2 разных цвета тянулись в разные стороны на одном уровне. Нужно реализовать подобие этой шапки, только резиновую.

Как сделать чтобы одна кнопка на разных компьютерах выполняла разные функции
имеются пользователи которые формируют документ в своем виде из одних и тех же данных была идея сделать все через SELECT CASE, но что...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
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