Меню
Категории
Цветная консоль в 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 работает всё. тфу-тфу поработаю с ними посмотрю.

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




*