…
|
||
---|---|---|
.. | ||
README.md | ||
textattr_coding.png |
conio.h 📑
В этом документе представлены описания и работа функций с примерами заголовоного файла conio.h
.
По факту, весь материал спизжен с сайта http://www.c-cpp.ru/funkcii/conioh, но из-за наличия на 50% страницы рекламы, читать материал затруднительно.
Если считаешь, что я нарушил чьи-то права, то мне как-то ПОХУЙ.
В интернете всё общее + на всех страницах не было текста, что материал
копировать запрещено... ПОХУЙ В ДВОЙНЕ!
В ходе Copy-Paste была поправлена вёрстка кода и другие улучшения.
Содержание
_setcursortype
getpass
window
wherex
/wherey
textmode
textcolor
textbackground
textattr
puttext
normvideo
lowvideo
highvideo
movetext
insline
gotoxy
gettextinfo
gettext
delline
cscanf
cputs
cprintf
clreol
/clrscr
kbhit
ungetch
getch
/getche
void _setcursortype(int type)
Описание:
Эта функция не определена стандартом ANSI С.
Функция _setcursortype()
изменяет внешний вид курсора.
Она может быть вызвана с передачей ей одного из следующих трех макросов,
которые определены в файле conio.h
.
Вызов функции с макросом _NOCURSOR
отключает курсор.
Использование макроса _SOLIDCURSOR
задает прямоугольный курсор,
занимающий символьную позицию.
Использование макроса _NORMALCURSOR
создает стандартный курсор.
Пример:
/* Следующий фрагмент кода изменяет курсор */
_setcursortуре(_SOLIDCURSOR);
char *getpass(const char *str)
Описание:
Эта функция не определена стандартом ANSI С.
После вывода на экран подсказки str
, функция getpass()
возвращает указатель на строку, завершающуюся нулевым символом длиной
не более восьми символов. Эта строка статически размещается
в памяти функцией getpass()
и переписывается всякий раз при вызове функции.
Если необходимо сохранить эту строку, ее нужно скопировать в какое-либо место в памяти.
Нажатые клавиши не отображаются эхом на экране во время ввода пароля.
Пример:
/* Следующая функция ожидает ввода подходящего пароля */
#include <conio.h>
#include <string.h>
void pswd(char *pw) {
char *input;
do {
input = getpass ("Enter your password: ");
} while (!strcmp("starbar", input));
printf("You're in!");
}
void window(int left, int top, int right, int bottom)
Описание:
Функция window()
используется для создания прямоугольного текстового окна,
имеющего левый верхний угол и правый нижний угол в точках с координатами
left
, top
и right
, bottom
соответственно.
Если какая-либо из координат недействительна, то функция window()
не выполняет никаких действий.
После успешного вызова функции window()
все ссылки
на координаты местоположения интерпретируются относительно окна, а не экрана.
Пример:
/* Следующий фрагмент кода создает окно
и записывает строку текста в точку
с координатами 2, 3 относительно окна */
window (10, 10, 60, 15);
gotoxy(2, 3);
cprintf("at location 2, 3");
int wherex(void)
и int wherey(void)
Описание:
Функции wherex()
и wherey()
возвращают текущие координаты курсора
х
и у
по отношению к текущему текстовому окну.
Пример:
/* Следующий фрагмент кода присваивает переменным
xpos и ypos значения координат х и у */
int xpos, ypos;
xpos = wherex();
ypos = wherey();
void textmode(int mode)
Описание:
Функция textmode()
используется для изменения видеорежима текстового экрана.
Аргумент mode
может принимать одно из значений, показанных в следующей таблице.
Можно использовать либо целое значение, либо соответствующий макрос,
который определен в файле conio.h
:
Макрос | Числовой эквивалент | Описание |
---|---|---|
BW40 | 0 | 40-кодоночный черно-белый |
С40 | 1 | 40-колоночный цветной |
BW80 | 2 | 80-колоночный черно-белый |
С80 | 3 | 80-колоночный цветной |
MONO | 1 | 80-колоночный монохромный |
С4350 | 64 | 43-строчный EGA или 50-строчный VGA |
LASTMODE | -1 | Предыдущий режим |
После вызова функции textmode()
экран переустанавливается
и все атрибуты текстового экрана возвращаются к своим значениям по умолчанию.
Пример:
/* Следующий фрагмент кода переводит видеорежим на 80-колоночный цветной */
textmode(С80);
void textcolor(int color)
Описание:
Функция textcolor()
устанавливает цвет символов, выводимых на текстовый экран.
Работает в старых компиляторах таких, как Turbo C и Dev C.
Она также может быть использована для задания мерцающих символов.
Ниже представлены допустимые значения параметра color
вместе с именами макросов,
определенных в файле conio.h
:
Макрос | Цифровой эквивалент |
---|---|
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()
.
Изменения касаются только тех символов, которые будут выведены после функции textcolor()
.
Пример:
/* Следующий фрагмент кода выводит текст с помощью мерцающих символов */
textcolor(BLINK);
void textbackground(int color)
Описание:
Функция textbackground()
устанавливает цвет фона текстового экрана.
Вызов функции textbackground()
воздействует только на цвет фона последующих операций записи.
Допустимые цвета определяются с помощью макросов, содержащихся в файле conio.h
, и представленных ниже.
Макрос | Цифровой эквивалент |
---|---|
BLACK | 0 |
BLUE | 1 |
GREEN | 2 |
CYAN | 3 |
RED | 4 |
MAGENTA | 5 |
BROWN | 6 |
LIGHTGRAY | 7 |
Новый цвет фона становится видимым после вызова функции textbackground()
.
Пример:
/* Следующий фрагмент кода устанавливает цвет фона текстового экрана голубым */
textbackground(CYAN);
void textattr(int attr)
Описание:
Функция textattr()
устанавливает одновременно как цвета переднего плана, так и фона.
Величина параметра attr
представляет собой закодированную информацию о цвете.
Способ кодировки представлен ниже.
При установке значения 1 в разряде 7 текст мерцает.
Разряды с 6 по 4 определяют цвет фона.
Разряды с 3 по 0 определяют цвет текста.
Наиболее простой способ задать цвет фона заключается в том,
чтобы умножить номер желаемого цвета на 16
и сложить его с цветом текста с помощью операции побитовое ИЛИ.
Например, чтобы создать зеленый фон с синим текстом,
можно использовать GREEN*16 | BLUE
.
Для того, чтобы заставить этот текст мерцать, к результату надо применить операцию побитового ИЛИ
с макросом BLINK(128)
.
Пример:
/* Следующая инструкция выводит текст,
мерцающий красным цветом на синем фоне */
textattr(RED | BLINK | BLUE*16);
int puttext(int left, int top, int right, int bottom, void *buf)
Описание:
Функция puttext()
копирует текст, предварительно сохраненный с использованием функции gettext()
.
Копирование осуществляется из буфера, на который указывает переменная buf
,
в область, левая верхняя точка которой имеет координаты left
и top
,
а правая нижняя — right
и bottom
.
Функция puttext()
использует абсолютные координаты экрана,
а не координаты относительно окна. Она возвращает значение 0
,
если координаты выходят за допустимую область,
и ненулевое значение — в противном случае.
Пример:
/* Следующий фрагмент кода копирует область экрана в память,
на которую указывает параметр buf,
а затем помещает этот текст в новое место на экране */
buf = malloc (10 * 10 *2);
gettext(10, 10, 20, 20, buf);
puttext(0, 0, 30, 30, buf);
void normvideo(void)
Описание:
После вызова функции normvideo()
изображенные на экране символы выводятся
в режиме нормальной интенсивности.
Эта функция работает только для текстовых экранов.
Пример:
/* Следующий фрагмент кода включает режим вывода с нормальной интенсивностью */
normvideo();
void lowvideo(void)
Описание
После вызова функции lowvideo()
изображенные на экране символы выводятся
в режиме пониженной яркости.
Эта функция работает только для текстовых экранов.
Пример:
/* Следующий фрагмент кода включает вывод с пониженной яркостью */
lowvideo();
void highvideo(void)
Описание:
После вызова функции highvideo()
выводимые на экран символы изображаются
в режиме повышенной яркости. Эта функция работает только для текстовых экранов.
Пример:
/* Следующий фрагмент кода включает вывод с повышенной яркостью */
highvideo();
int movetext(int left, int top, int right, int bottom, int newleft, int newtop)
Описание:
Функция movetext()
перемещает часть текста по экрану.
Текст берется из прямоугольника с левым верхним углом
в точке с координатами left
, top
и правым нижним углом
в точке с координатами right
, bottom
.
Точка положения нового верхнего угла имеет координаты
newleft
, newtop
. Эта функция относится не к окну, а к экрану.
Функция movetext()
возвращает 0
,
если хотя бы одна из координат выходит за пределы допустимой области,
и ненулевое значение — в противном случае.
Пример:
/* Следующий фрагмент кода передвигает содержимое прямоугольника
с левым верхним углом в точке 1, 1
и правым нижним углом в точке 8, 8 в точку 10, 10 */
movetext(1, 1, 8, 8, 10, 10);
void insline(void)
Описание:
Функция insline()
вставляет пустую строку в текущее положение курсора.
Все строки ниже курсора сдвигаются вниз.
Эта функция предназначена только для текстового режима
и выполняет операцию вставки относительно текущего текстового окна.
Пример:
/* Следующая программа иллюстрирует использование функции insline() */
#include <conio.h>
int main(void) {
register int i;
clrscr();
for (i = 1; i<24; i + + ) {
gotoxy(1, i);
cprintf("This is line %d\n\r", i);
}
getche();
gotoxy(1, 10);
insline();
getch();
return 0;
}
void gotoxy(int x, int y)
Описание:
Функция gotoxy()
помещает курсор текстового экрана в точку с координатами х, у.
Если хотя бы одна из координат недействительна, то никаких действий не выполняется.
Пример:
/* Следующая программа выводит символы X по диагонали экрана */
#include <conio.h>
int main(void) {
register int i, j;
/* вывод диагонали из Х-ов */
clrscr ();
for(i = 1, j = 1; j < 24; i+=3, j++) {
gotoxy(i, j);
cprintf("X");
}
getche();
clrscr();
return 0;
}
void gettextinfo(struct text_info *info)
Описание:
Функция gettextinfo()
получает текущие установки текста
и возвращает их в структуре, на которую указывает параметр info
.
Структура text_info
объявлена следующим образом:
struct text_info {
unsigned char winleft; /* координаты */
unsigned char wintop; /* верхнего левого угола */
unsigned char winright; /* координаты */
unsigned char winbottom; /* нижнего правого угола */
unsigned char attribute; /* текущие атрибуты */
unsigned char normattr; /* нормальные атрибуты */
unsigned char currmode; /* активный видеорежим */
unsigned char screenheight; /* размеры */
unsigned char screenwidth; /* экрана */
unsigned char curx; /* текущие координаты */
unsigned char cury; /* курсора */
};
Пример:
/* Следующий фрагмент получает текущие установки текста */
struct text_info i;
gettextinfo(&i);
int gettext(int left, int top, int right, int bottom, void *buf)
Описание:
Функция gettext()
копирует текст из прямоугольника
с левым верхним углом в точке left
, top
и с правым нижним углом в точке с координатами right
, bottom
.
Текст копируется в буфер, на который указывает переменная buf
.
Координаты относятся не к окну, а к экрану.
Необходимое количество памяти для хранения области экрана вычисляется по формуле
число_байт = строки * столбцы * 2
.
Причина, по которой необходимо умножить число столбцов на число строк
и умножить это произведение на 2
, заключается в том, что каждый символ,
выводимый на экран, требует для хранения 2 байта:
1 байт для самого символа и 1 байт для его атрибутов.
Функция возвращает в случае успеха 1
и 0
при ошибке.
Пример:
/* Следующий фрагмент кода копирует область экрана в память,
на которую указывает параметр buf */
buf = malloc(10 * 10 *2);
gettext(10, 10, 20, 20, buf);
void delline(void)
Описание:
Функция delline()
удаляет строку в активном окне, которая содержит курсор.
Все линии ниже удаляемой поднимаются вверх.
Надо помнить, что если текущее окно меньше целого экрана,
то воздействие оказывается только на текст в окне.
Пример:
/* Следующая программа выводит 24 строки и затем убирает строку 3 */
#include <conio.h>
int main(void) {
register int i; clrscr();
for (i = 0; i < 24; i++) cprintf("line %d\n\r", i);
getch();
gotoxy(1, 3);
delline();
getch();
return 0;
}
int cscanf(char *fmt, ...)
Описание:
Функция cscanf()
работает так же, как и функция scanf(),
за исключением того, что она читает информацию с консоли вместо stdin
.
Она не может быть перенаправлена. Относительно подробностей следует обратиться
к описанию функции scanf()
.
Функция cscanf()
возвращает число аргументов, которым были присвоены значения.
Это число не включает пропущенные поля. Функция cscanf()
возвращает значение EOF
в случае,
если была сделана попытка чтения за пределами конца файла.
Пример:
/* Следующий фрагмент кода читает с консоли строку и число с плавающей точкой */
char str[80];
float f;
cscanf("%s%f", str, &f);
int cputs(const char *str)
Описание:
Функция cputs()
выводит в текущее текстовое окно строку,
на которую указывает параметр str
.
Ее вывод не может быть перенаправлен,
и она автоматически предотвращает пересечение границ окна.
Функция возвращает последний символ, либо величину EOF
в случае возникновения ошибки.
Пример:
/* Следующая программа создает окно и использует функцию cputs() для записи строки,
которая не умещается в окне. Текст фактически переносится на новую строку в конце окна */
#include <conio.h>
void border(int, int, int, int);
int main(void) {
clrscr();
/* создание первого окна */
window(3, 2, 40, 9);
border(3, 2, 40, 9);
gotoxy(1,1);
cputs("This line will be wrapped at the end of the window.");
getche();
return 0;
}
/* вывод границы вокруг первого окна */
void border(int startx, int starty, int endx, int endy) {
register int i;
gotoxy(1, 1);
for (i = 0; i <= endx - startx; i++) putch('-');
gotoxy(1, endy - starty);
for(i = 0; i <= endx - startx; i++) putch('-');
for(i = 2; i < endy-starty; i++) {
gotoxy(1, i);
putch('|');
gotoxy(endx - startx + 1, i);
putch('|');
}
}
int cprintf(const char *fmt, ...)
Описание:
Функция cprintf()
работает так же, как и функция printf()
,
с тем только отличием, что она пишет в текущее окно вместо stdout
.
Ее вывод не может быть перенаправлен, и она автоматически предотвращает вывод за пределы окна.
Относительно подробностей следует обратиться к описанию функции printf()
.
Функция cprintf()
не преобразует символ новой строки (\n
)
в пару перевод строки — возврат каретки,
как это имеет место в случае функции printf()
.
Поэтому необходимо явным образом ставить символ возврата каретки (\r
),
если в этом есть необходимость.
Функция cprintf()
возвращает число фактически выведенных символов.
Отрицательное возвращаемое значение означает наличие ошибки.
Пример:
/* Следующая программа выводит данные, представленные ниже в комментариях */
#include <conio.h>
int main(void) {
/* выводит выровненное по левому краю
"this is a test" в 20-символьном поле */
cprintf("%-20s", "this is a test");
/* выводит вещественное значение с тремя цифрами после запятой
в 10-символьном поле. В результате работы выведется " 12.235" */
cprintf("%10.3f\n\r", 12.234657);
return 0;
}
void clreol(void)
и void clrscr(void)
Описание:
Функция clreol()
очищает строку от текущей позиции курсора и до конца строки активного окна.
Позиция курсора не изменяется.
Функция clrscr()
полностью очищает активное текстовое окно
и помещает курсор в левый верхний угол (1, 1).
Пример:
/* Следующая программа иллюстрирует использование функций clreol() и clrscr() */
#include <conio.h>
int main(void) {
register int i;
gotoxy(10, 10);
cprintf("This is a test of the clreol() function.");
getch();
gotoxy(10, 10);
clreol();
for(i = 0; i < 20; i++) cprintf("Hello there\n\r");
getch();
/* очистка экрана */
clrscr();
return 0;
}
int kbhit()
Описание:
Эта функция не определена стандартом ANSI C.
Функция kbhit()
возвращает истину, если нажата какая-либо клавиша на клавиатуре.
В противном случае возвращается 0.
В любом случае код клавиши не удаляется из входного буфера.
Пример:
/* Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши */
while(!kbhit()); /* ожидание нажатия клавиши */
int ungetch(int ch)
Описание:
Эта функция не определена стандартом ANSI С. Она не может использоваться в программах Windows.
Функция ungetch()
возвращает символ, заданный младшим байтом ch
,
обратно во входной буфер консоли.
При следующем обращении к функции ввода с консоли этот символ будет считан снова.
Между двумя последовательными операциями ввода может быть возвращен обратно только один символ.
Возвращаемое значение равно ch
в случае успеха и EOF
— при неудаче.
Пример:
/* Приведенная ниже программа вводит клавишу, отображает ее на экране,
затем возвращает ее во входной буфер, снова считывает и выводит на экран */
#include <stdio.h>
#include <conio.h>
int main() {
char ch;
ch = getch(); // получение нажатия
putch(ch); // вывод клавиши
ungetch(ch); // возврат в буфер
ch = getch(); // получение той же клавиши еще раз
putch(ch); // вывод клавиши еще раз
return 0;
}
int getch(void)
и int getche(void)
Описание:
Функция getch()
возвращает очередной символ, считанный с консоли,
но не выводит этот символ на экран.
Функция getche()
возвращает очередной символ, считанный с консоли,
и выводит этот символ на экран.
Ни одна из этих функций не определена стандартом ANSI С.
Пример:
/* В этом фрагменте getch() используется
для считывания выбора пользователя для программы проверки орфографии */
do {
printf("1: Check spelling\n");
printf("2: Correct spelling\n");
printf("3: Look up a word in the dictionary\n");
printf("4: Quit\n");
printf("\nEnter your selection: ");
choice = getch();
} while(!strchr ("1234", choice));