720 lines
61 KiB
Markdown
720 lines
61 KiB
Markdown
# conio.h 📑
|
||
|
||
В этом документе представлены описания и работа функций с примерами заголовоного файла `conio.h`.
|
||
|
||
По факту, весь материал спизжен с сайта http://www.c-cpp.ru/funkcii/conioh,
|
||
но из-за наличия на 50% страницы рекламы, читать материал затруднительно.
|
||
|
||
Если считаешь, что я нарушил чьи-то права, то мне как-то ПОХУЙ.
|
||
В интернете всё общее + на всех страницах не было текста, что материал
|
||
копировать запрещено... ПОХУЙ В ДВОЙНЕ!
|
||
|
||
В ходе **Copy-Paste** была поправлена вёрстка кода и другие улучшения.
|
||
|
||
## Содержание
|
||
|
||
* [`_setcursortype`](#void-_setcursortype-int-type)
|
||
* [`getpass`](#char-getpass-const-char-str)
|
||
* [`window`](#void-window-int-left-int-top-int-right-int-bottom)
|
||
* [`wherex`/`wherey`](#int-wherex-void-%D0%B8-int-wherey-void)
|
||
* [`textmode`](#void-textmode-int-mode)
|
||
* [`textcolor`](#void-textcolor-int-color)
|
||
* [`textbackground`](#void-textbackground-int-color)
|
||
* [`textattr`](#void-textattr-int-attr)
|
||
* [`puttext`](#int-puttext-int-left-int-top-int-right-int-bottom-void-buf)
|
||
* [`normvideo`](#void-normvideo-void)
|
||
* [`lowvideo`](#void-lowvideo-void)
|
||
* [`highvideo`](#void-highvideo-void)
|
||
* [`movetext`](#int-movetext-int-left-int-top-int-right-int-bottom-int-newleft-int-newtop)
|
||
* [`insline`](#void-insline-void)
|
||
* [`gotoxy`](#void-gotoxy-int-x-int-y)
|
||
* [`gettextinfo`](#void-gettextinfo-struct-text_info-info)
|
||
* [`gettext`](#int-gettext-int-left-int-top-int-right-int-bottom-void-buf)
|
||
* [`delline`](#void-delline-void)
|
||
* [`cscanf`](#int-cscanf-char-fmt)
|
||
* [`cputs`](#int-cputs-const-char-str)
|
||
* [`cprintf`](#int-cprintf-const-char-fmt)
|
||
* [`clreol`/`clrscr`](#void-clreol-void-%D0%B8-void-clrscr-void)
|
||
* [`kbhit`](#int-kbhit)
|
||
* [`ungetch`](#int-ungetch-int-ch)
|
||
* [`getch`/`getche`](#int-getch-void-%D0%B8-int-getche-void)
|
||
|
||
## `void _setcursortype(int type)`
|
||
|
||
### Описание:
|
||
|
||
Эта функция не определена стандартом ANSI С.
|
||
|
||
Функция `_setcursortype()` изменяет внешний вид курсора.
|
||
Она может быть вызвана с передачей ей одного из следующих трех макросов,
|
||
которые определены в файле `conio.h`.
|
||
Вызов функции с макросом `_NOCURSOR` отключает курсор.
|
||
Использование макроса `_SOLIDCURSOR` задает прямоугольный курсор,
|
||
занимающий символьную позицию.
|
||
Использование макроса `_NORMALCURSOR` создает стандартный курсор.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода изменяет курсор */
|
||
_setcursortуре(_SOLIDCURSOR);
|
||
```
|
||
|
||
## `char *getpass(const char *str)`
|
||
|
||
### Описание:
|
||
|
||
Эта функция не определена стандартом ANSI С.
|
||
|
||
После вывода на экран подсказки `str`, функция `getpass()`
|
||
возвращает указатель на строку, завершающуюся нулевым символом длиной
|
||
не более восьми символов. Эта строка статически размещается
|
||
в памяти функцией `getpass()` и переписывается всякий раз при вызове функции.
|
||
Если необходимо сохранить эту строку, ее нужно скопировать в какое-либо место в памяти.
|
||
Нажатые клавиши не отображаются эхом на экране во время ввода пароля.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая функция ожидает ввода подходящего пароля */
|
||
#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()` все ссылки
|
||
на координаты местоположения интерпретируются относительно окна, а не экрана.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода создает окно
|
||
и записывает строку текста в точку
|
||
с координатами 2, 3 относительно окна */
|
||
window (10, 10, 60, 15);
|
||
gotoxy(2, 3);
|
||
cprintf("at location 2, 3");
|
||
```
|
||
|
||
## `int wherex(void)` и `int wherey(void)`
|
||
|
||
### Описание:
|
||
|
||
Функции `wherex()` и `wherey()` возвращают текущие координаты курсора
|
||
`х` и `у` по отношению к текущему текстовому окну.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода присваивает переменным
|
||
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()` экран переустанавливается
|
||
и все атрибуты текстового экрана возвращаются к своим значениям по умолчанию.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода переводит видеорежим на 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()`.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода выводит текст с помощью мерцающих символов */
|
||
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()`.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода устанавливает цвет фона текстового экрана голубым */
|
||
textbackground(CYAN);
|
||
```
|
||
|
||
## `void textattr(int attr)`
|
||
|
||
### Описание:
|
||
|
||
Функция `textattr()` устанавливает одновременно как цвета переднего плана, так и фона.
|
||
Величина параметра `attr` представляет собой закодированную информацию о цвете.
|
||
Способ кодировки представлен ниже.
|
||
|
||

|
||
|
||
При установке значения 1 в разряде 7 текст мерцает.
|
||
Разряды с 6 по 4 определяют цвет фона.
|
||
Разряды с 3 по 0 определяют цвет текста.
|
||
Наиболее простой способ задать цвет фона заключается в том,
|
||
чтобы умножить номер желаемого цвета на 16
|
||
и сложить его с цветом текста с помощью операции побитовое ИЛИ.
|
||
Например, чтобы создать зеленый фон с синим текстом,
|
||
можно использовать `GREEN*16 | BLUE`.
|
||
Для того, чтобы заставить этот текст мерцать, к результату надо применить операцию побитового ИЛИ
|
||
с макросом `BLINK(128)`.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая инструкция выводит текст,
|
||
мерцающий красным цветом на синем фоне */
|
||
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`,
|
||
если координаты выходят за допустимую область,
|
||
и ненулевое значение — в противном случае.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода копирует область экрана в память,
|
||
на которую указывает параметр buf,
|
||
а затем помещает этот текст в новое место на экране */
|
||
buf = malloc (10 * 10 *2);
|
||
gettext(10, 10, 20, 20, buf);
|
||
puttext(0, 0, 30, 30, buf);
|
||
```
|
||
|
||
## `void normvideo(void)`
|
||
|
||
### Описание:
|
||
|
||
После вызова функции `normvideo()` изображенные на экране символы выводятся
|
||
в режиме нормальной интенсивности.
|
||
Эта функция работает только для текстовых экранов.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода включает режим вывода с нормальной интенсивностью */
|
||
normvideo();
|
||
```
|
||
|
||
## `void lowvideo(void)`
|
||
|
||
**Описание**
|
||
|
||
После вызова функции `lowvideo()` изображенные на экране символы выводятся
|
||
в режиме пониженной яркости.
|
||
Эта функция работает только для текстовых экранов.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода включает вывод с пониженной яркостью */
|
||
lowvideo();
|
||
```
|
||
|
||
## `void highvideo(void)`
|
||
|
||
### Описание:
|
||
|
||
После вызова функции `highvideo()` выводимые на экран символы изображаются
|
||
в режиме повышенной яркости. Эта функция работает только для текстовых экранов.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода включает вывод с повышенной яркостью */
|
||
highvideo();
|
||
```
|
||
|
||
## `int movetext(int left, int top, int right, int bottom, int newleft, int newtop)`
|
||
|
||
### Описание:
|
||
|
||
Функция `movetext()` перемещает часть текста по экрану.
|
||
Текст берется из прямоугольника с левым верхним углом
|
||
в точке с координатами `left`, `top` и правым нижним углом
|
||
в точке с координатами `right`, `bottom`.
|
||
Точка положения нового верхнего угла имеет координаты
|
||
`newleft`, `newtop`. Эта функция относится не к окну, а к экрану.
|
||
Функция `movetext()` возвращает `0`,
|
||
если хотя бы одна из координат выходит за пределы допустимой области,
|
||
и ненулевое значение — в противном случае.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода передвигает содержимое прямоугольника
|
||
с левым верхним углом в точке 1, 1
|
||
и правым нижним углом в точке 8, 8 в точку 10, 10 */
|
||
movetext(1, 1, 8, 8, 10, 10);
|
||
```
|
||
|
||
## `void insline(void)`
|
||
|
||
### Описание:
|
||
|
||
Функция `insline()` вставляет пустую строку в текущее положение курсора.
|
||
Все строки ниже курсора сдвигаются вниз.
|
||
Эта функция предназначена только для текстового режима
|
||
и выполняет операцию вставки относительно текущего текстового окна.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа иллюстрирует использование функции 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()` помещает курсор текстового экрана в точку с координатами х, у.
|
||
Если хотя бы одна из координат недействительна, то никаких действий не выполняется.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа выводит символы 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` объявлена следующим образом:
|
||
|
||
```c
|
||
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; /* курсора */
|
||
};
|
||
```
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент получает текущие установки текста */
|
||
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` при ошибке.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода копирует область экрана в память,
|
||
на которую указывает параметр buf */
|
||
buf = malloc(10 * 10 *2);
|
||
gettext(10, 10, 20, 20, buf);
|
||
```
|
||
|
||
## `void delline(void)`
|
||
|
||
### Описание:
|
||
|
||
Функция `delline()` удаляет строку в активном окне, которая содержит курсор.
|
||
Все линии ниже удаляемой поднимаются вверх.
|
||
Надо помнить, что если текущее окно меньше целого экрана,
|
||
то воздействие оказывается только на текст в окне.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа выводит 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` в случае,
|
||
если была сделана попытка чтения за пределами конца файла.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент кода читает с консоли строку и число с плавающей точкой */
|
||
char str[80];
|
||
float f;
|
||
cscanf("%s%f", str, &f);
|
||
```
|
||
|
||
## `int cputs(const char *str)`
|
||
|
||
### Описание:
|
||
|
||
Функция `cputs()` выводит в текущее текстовое окно строку,
|
||
на которую указывает параметр `str`.
|
||
Ее вывод не может быть перенаправлен,
|
||
и она автоматически предотвращает пересечение границ окна.
|
||
|
||
Функция возвращает последний символ, либо величину `EOF` в случае возникновения ошибки.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа создает окно и использует функцию 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()` возвращает число фактически выведенных символов.
|
||
Отрицательное возвращаемое значение означает наличие ошибки.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа выводит данные, представленные ниже в комментариях */
|
||
#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).
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующая программа иллюстрирует использование функций 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.
|
||
В любом случае код клавиши не удаляется из входного буфера.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши */
|
||
while(!kbhit()); /* ожидание нажатия клавиши */
|
||
```
|
||
|
||
## `int ungetch(int ch)`
|
||
|
||
### Описание:
|
||
|
||
Эта функция не определена стандартом ANSI С. Она не может использоваться в программах Windows.
|
||
|
||
Функция `ungetch()` возвращает символ, заданный младшим байтом `ch`,
|
||
обратно во входной буфер консоли.
|
||
При следующем обращении к функции ввода с консоли этот символ будет считан снова.
|
||
Между двумя последовательными операциями ввода может быть возвращен обратно только один символ.
|
||
|
||
Возвращаемое значение равно `ch` в случае успеха и `EOF` — при неудаче.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* Приведенная ниже программа вводит клавишу, отображает ее на экране,
|
||
затем возвращает ее во входной буфер, снова считывает и выводит на экран */
|
||
#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 С.
|
||
|
||
### Пример:
|
||
|
||
```c
|
||
/* В этом фрагменте 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));
|
||
```
|