Меню
Категории
Цветная консоль в C++ для новчика
9 ноября, 2007 Программинг

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

Но говорил, что такие функции существуют и не мало! Ну, ясно, что я сразу полез искать в Интернете. И естественно там я ничего не поFINDил. И я уже совсем расстроился, как случилось чудо!!! На уроке информатики, где мы изучали MS Word и DOS , заскучал и полез искать хлам на винте. И случайно увидел какие-то исходники…

Ну естественно я их начал читать. и Тогда я увидел, что есть умные люди в универе, они вручную перевели из Ansi в OEM кодировку и засунули в исходник текст, что позволило работать с русскими словами в с++ и выводить русские буквы в консоль (Об этом позже.). Я подумал «Алелуя! Здесь есть умные люди». И радости моей не было пределе, а того чувака я так и не нашёл :(. Но, запустив этот исходник в билдере я уж посильнее удивился. Он покрасил текст и фон в консольном приложении. Ну, блин, я сразу взялся всё переписывать в тетрадь. И вот теперь я доношу эту инфу до вас!

Текст покрасить можно разными цветами и делаем это так:

#include <stdio.h>
#include <conio.h> //Необходимые библиотеки

// В справке указано только КОНИО, но так у меня не работает.
// Ширина экрана (в символах) в DOS всегда 80 (а высота — 25 строк).

textbackground(GREEN); //Цвет фона.
textcolor(RED); //Цвет текста.
clrscr(); //Очищаем экран (Не обязательно!)

Вот привожу таблицу цветов:

BLACK 0
BLUE 1
GREEN 2
CYAN 3
RED 4
MAGENTA 5 //Цвета писать в верхнем регистре а команды в нижнем.
BROWN 6
LIGHTGRAY 7
DARKGRAY 8
LIGHTBLUE 9
LIGHTGREEN 10
LIGHTCYAN 11
LIGHTRED 12
LIGHTMAGENTA 13
YELLOW 14
WHITE 15

BLINK 128

С английским разбирайся сам.
Можно юзать эту функцию со смесью цветов:

textcolor(CYAN + BLINK);

С этой функцией я долбался очень долго!

Теперь перейдем к следующей функции: WINDOW
Она позволяет, как окрасить нужную часть экрана, так и позволить вводить там текст, подобно gotoxy(); или (LOCATE — В бейсике).
Эту функцию нужно юзать с теми же библиотеками, что и textcolor.

clrscr();
textbackground(GREEN);
textcolor(RED);
window(30,10,50,10); //Вот и она.
clrscr();

Результат работы этого сыра смотри сам! И поймешь!
Вот тебе вырезка из справки Билдера

Прототип
void window(int left, int top, int right, int bottom);

С английскими словами проблем быть не должно!

Если window не использовать, то она равна по умолчанию первой строке и первому столбцу.

Эти функции можно использовать несколько раз в программе:

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int main()
{ float z,;
clrscr();
textbackground(GREEN);
textcolor(RED); //Тут меняем как надо.
window(30,10,50,10); //Положение экрана!
clrscr();
cout<<«\Hello World!»;
getch();
textbackground(BLACK);
textcolor(LIGHTGRAY); //Все возвращаем обратно. По умолчанию так и есть.
clrscr();
}

Теперь ляпну про генератор случайных чисел:
Его юзать вот так:

randomize();
a = rand()/3276 //В a сгенерится любое число от 0 до 9.
a=random(50); //Или вот так число от 0 до 49.

Часто без использования «randomize();» генератор генерит все одинаковые числа!
А с ним все проще он всегда разные числа генерирует.

Всякие прикольные утилиты тоже пригодятся. Например
Cout<<«/n»; можно заменить вот так cout<<endl;

Функция gotoxy(1,44) — отправляет курсор, который мигает в точку окна строки 1 ,столбца 44.
Подключив #include math.h мы можем считать различные математические функции:

A = pow(A,4) — возводим A в 4 степень.
A = sqrt(A) — Получаем квадратный корень из A;
A = tan, sin, cos, exp, exp2, ctan, ant — всякие тангенсы экспоненты!

Если набираем символы для вывода в консоль:
Cout << «/t/n»;
Есть много нюансов.

/t — Табуляция.
/a — Звуковой сигнал.
/v
/f
/x — Разберись с ними сам, а проще попробуй все :.

Также чтоб вывеси «/» нужно писать:

Cout<<«//»;
А «:
Cout<<«/»»;

Вот так вот.
Функция getch(); ждет символа с клавиатуры! Полезна в конце программ, чтобы не закрылось окно.
Функций еще очень много, хочешь знать больше?? Жми F1

Удачи.

18 комментариев
⇓
  1. Спасибо, помогло. Пиши еще всякого рода мелочи. Мне как для новичка очень интересно.

  2. Для студии пожалуйста оптимизируйте, а то ничего не работает. (Microsoft Visual Studio 2005/2008)

  3. Это ты уж как-нибудь сам оптимизируй.

  4. Владимир. подключи библиотеки правильно и всё будет работать!
    #include stdio.h
    #include conio.h //Необходимые библиотеки

  5. Ничего не работает, даже с правильно подключенными библиотеками(для 2005/2008 Visual Studio).
    \t — табуляция
    \n — переход на новую строку
    clrscr() — заменяем на system(«cls»); — (очищает экран)
    getch() — красивее выглядит system(«pause»); — (пишет: Для продолжения нажмите любую клавишу… , и ждет нажатия..)
    Для этих двух функций подключаем: #include «windows.h» — работает для любого Visual

  6. textbackground,textcolor, clrscr, goto не являются стандартными функциями VS C++ .Напишити пожалуйста для textbackground альтернативу. а то не знаю я как
    вот примеры по
    clrscr:
    #include
    #include
    #include

    void clrscr(void)
    {
    HANDLE hOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
    COORD start = {0, 0};
    CONSOLE_SCREEN_BUFFER_INFO info;
    ::GetConsoleScreenBufferInfo(hOut, &info);
    ::FillConsoleOutputCharacter(hOut, ‘ ‘, info.dwSize.X*info.dwSize.Y, start, NULL);
    ::SetConsoleCursorPosition(hOut, start);
    }
    int main(void)
    {
    int i;
    clrscr();
    for(i=0;i<20;i++)
    cprintf(«%d\r\n»,i);
    cprintf(«\r\nДля очистки экрана нажмите любую клавишу»);
    getch();
    clrscr();

    cprintf(«Экран очищен!»);
    getch();
    return 0;
    }

    textcolor:

    #include
    #include

    int main()
    {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10); //replace the 0 with a number for the color you want

    cout << «Your text here» << endl;

    return 0;
    }

    goto:
    #include
    #include
    int main ( int argc, char** argv )
    {
    HANDLE hConsole = GetStdHandle ( STD_OUTPUT_HANDLE );

    if ( INVALID_HANDLE_VALUE != hConsole )
    {
    COORD pos = {32, 11};
    SetConsoleCursorPosition ( hConsole, pos );
    printf ( «Hello World!\n» );
    }

    return 0;
    }
    все проверено и работает!

  7. А в линухе размер консоли — штука не постоянная, как быть?

  8. работает в VS С++

    #include
    ////( или #include )

    void ClrScr()
    {
    system(«cls»);
    }

  9. Видимо я сейчас тоже молод и глуп еще, потому что статья мне реально помогла.Пасиб!

  10. я всё перепробывал но мой код выводит Hello world! но сразу исчезает
    #include
    #include
    #include «stdafx.h»
    #include
    using namespace std;

    int main()
    {
    cout << "Hello, World!" << endl;
    getch(Hello, World!);
    return 0;

    }
    помогите если сможете

  11. Вот так должно работать

    #include
    #include «stdafx.h»
    #include
    using namespace std;

    int main()
    {
    cout << "Hello, World!" << endl;
    getch();
    return 0;
    }

  12. Не работает смена текста в консоли, юзаю визуал 2010 с++ помогите, вот мое мыло^ Vasek-sv@mail.ru

  13. Фэйл. Так и не разобрался… Компилирую gcc из под linux. Не работает…

  14. Дмитрий

    #include «stdafx.h»;
    #include
    #include

    using namespace std;

    int main {
    setlocale(LC_ALL, «Rus»);
    cout << "Привет, Мир!" << endl;
    system("pause");
    return 0;
    }

  15. Дмитрий

    там где инклуды скрыты и (iostream и windows.h в )

  16. Василий, пиши так:
    system(«color F0»); //F — цвет фона, 0 — цвет текста

    Вот таблица цветов:
    0 = Black 8 = Gray
    1 = Blue 9 = Light Blue
    2 = Green A = Light Green
    3 = Aqua B = Light Aqua
    4 = Red C = Light Red
    5 = Purple D = Light Purple
    6 = Yellow E = Light Yellow
    7 = White F = Bright White

    Источник: https://www.cyberforum.ru/cpp-beginners/thread57001.html

  17. А как сделать чтобы при вводе с клавиатуры, вводимый текст уже был окрашен в какой-либо цвет?

  18. Спасибо, долго мозг ломал, как цветные символы выводить, как вывести, затереть и на место предыдущего символа вывести новый, сам хотел написать, что-то получилось, но не то чего хотелось, а с API я не дружу, пока что. У меня и без подключения библиотек #include ; #include работает всё. тфу-тфу поработаю с ними посмотрю.

Добавить комментарий

→

→

→

*