snipplets.dev/snipplets/code/C/conio.h/README.md

720 lines
61 KiB
Markdown
Raw Normal View History

2023-08-16 16:02:33 +03:00
# conio.h 📑
В этом документе представлены описания и работа функций с примерами заголовоного файла `conio.h`.
По факту, весь материал спизжен с сайта http://www.c-cpp.ru/funkcii/conioh,
но из-за наличия на 50% страницы рекламы, читать материал затруднительно.
Если считаешь, что я нарушил чьи-то права, то мне как-то ПОХУЙ.
В интернете всё общее + на всех страницах не было текста, что материал
копировать запрещено... ПОХУЙ В ДВОЙНЕ!
В ходе **Copy-Paste** была поправлена вёрстка кода и другие улучшения.
## Содержание
2023-08-16 16:20:44 +03:00
* [`_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)
2023-08-16 16:06:52 +03:00
## `void _setcursortype(int type)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Эта функция не определена стандартом ANSI С.
Функция `_setcursortype()` изменяет внешний вид курсора.
Она может быть вызвана с передачей ей одного из следующих трех макросов,
которые определены в файле `conio.h`.
Вызов функции с макросом `_NOCURSOR` отключает курсор.
Использование макроса `_SOLIDCURSOR` задает прямоугольный курсор,
занимающий символьную позицию.
Использование макроса `_NORMALCURSOR` создает стандартный курсор.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода изменяет курсор */
_setcursortуре(_SOLIDCURSOR);
```
2023-08-16 16:06:52 +03:00
## `char *getpass(const char *str)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Эта функция не определена стандартом ANSI С.
После вывода на экран подсказки `str`, функция `getpass()`
возвращает указатель на строку, завершающуюся нулевым символом длиной
не более восьми символов. Эта строка статически размещается
в памяти функцией `getpass()` и переписывается всякий раз при вызове функции.
Если необходимо сохранить эту строку, ее нужно скопировать в какое-либо место в памяти.
Нажатые клавиши не отображаются эхом на экране во время ввода пароля.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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!");
}
```
2023-08-16 16:06:52 +03:00
## `void window(int left, int top, int right, int bottom)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `window()` используется для создания прямоугольного текстового окна,
имеющего левый верхний угол и правый нижний угол в точках с координатами
`left`, `top` и `right`, `bottom` соответственно.
Если какая-либо из координат недействительна, то функция `window()` не выполняет никаких действий.
После успешного вызова функции `window()` все ссылки
на координаты местоположения интерпретируются относительно окна, а не экрана.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода создает окно
и записывает строку текста в точку
с координатами 2, 3 относительно окна */
window (10, 10, 60, 15);
gotoxy(2, 3);
cprintf("at location 2, 3");
```
2023-08-16 16:06:52 +03:00
## `int wherex(void)` и `int wherey(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функции `wherex()` и `wherey()` возвращают текущие координаты курсора
`х` и `у` по отношению к текущему текстовому окну.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода присваивает переменным
xpos и ypos значения координат х и у */
int xpos, ypos;
xpos = wherex();
ypos = wherey();
```
2023-08-16 16:06:52 +03:00
## `void textmode(int mode)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `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()` экран переустанавливается
и все атрибуты текстового экрана возвращаются к своим значениям по умолчанию.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода переводит видеорежим на 80-колоночный цветной */
textmode(С80);
```
2023-08-16 16:06:52 +03:00
## `void textcolor(int color)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `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()`.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода выводит текст с помощью мерцающих символов */
textcolor(BLINK);
```
2023-08-16 16:06:52 +03:00
## `void textbackground(int color)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `textbackground()` устанавливает цвет фона текстового экрана.
Вызов функции `textbackground()` воздействует только на цвет фона последующих операций записи.
Допустимые цвета определяются с помощью макросов, содержащихся в файле `conio.h`, и представленных ниже.
| Макрос | Цифровой эквивалент |
|-----------|---------------------|
| BLACK | 0 |
| BLUE | 1 |
| GREEN | 2 |
| CYAN | 3 |
| RED | 4 |
| MAGENTA | 5 |
| BROWN | 6 |
| LIGHTGRAY | 7 |
Новый цвет фона становится видимым после вызова функции `textbackground()`.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода устанавливает цвет фона текстового экрана голубым */
textbackground(CYAN);
```
2023-08-16 16:06:52 +03:00
## `void textattr(int attr)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `textattr()` устанавливает одновременно как цвета переднего плана, так и фона.
Величина параметра `attr` представляет собой закодированную информацию о цвете.
Способ кодировки представлен ниже.
![](data:image/png;base64,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
При установке значения 1 в разряде 7 текст мерцает.
Разряды с 6 по 4 определяют цвет фона.
Разряды с 3 по 0 определяют цвет текста.
Наиболее простой способ задать цвет фона заключается в том,
чтобы умножить номер желаемого цвета на 16
и сложить его с цветом текста с помощью операции побитовое ИЛИ.
Например, чтобы создать зеленый фон с синим текстом,
можно использовать `GREEN*16 | BLUE`.
Для того, чтобы заставить этот текст мерцать, к результату надо применить операцию побитового ИЛИ
с макросом `BLINK(128)`.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующая инструкция выводит текст,
мерцающий красным цветом на синем фоне */
textattr(RED | BLINK | BLUE*16);
```
2023-08-16 16:06:52 +03:00
## `int puttext(int left, int top, int right, int bottom, void *buf)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `puttext()` копирует текст, предварительно сохраненный с использованием функции `gettext()`.
Копирование осуществляется из буфера, на который указывает переменная `buf`,
в область, левая верхняя точка которой имеет координаты `left` и `top`,
а правая нижняя — `right` и `bottom`.
Функция `puttext()` использует абсолютные координаты экрана,
а не координаты относительно окна. Она возвращает значение `0`,
если координаты выходят за допустимую область,
и ненулевое значение — в противном случае.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода копирует область экрана в память,
на которую указывает параметр buf,
а затем помещает этот текст в новое место на экране */
buf = malloc (10 * 10 *2);
gettext(10, 10, 20, 20, buf);
puttext(0, 0, 30, 30, buf);
```
2023-08-16 16:06:52 +03:00
## `void normvideo(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
После вызова функции `normvideo()` изображенные на экране символы выводятся
в режиме нормальной интенсивности.
Эта функция работает только для текстовых экранов.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода включает режим вывода с нормальной интенсивностью */
normvideo();
```
2023-08-16 16:06:52 +03:00
## `void lowvideo(void)`
2023-08-16 16:02:33 +03:00
**Описание**
После вызова функции `lowvideo()` изображенные на экране символы выводятся
в режиме пониженной яркости.
Эта функция работает только для текстовых экранов.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода включает вывод с пониженной яркостью */
lowvideo();
```
2023-08-16 16:06:52 +03:00
## `void highvideo(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
После вызова функции `highvideo()` выводимые на экран символы изображаются
в режиме повышенной яркости. Эта функция работает только для текстовых экранов.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода включает вывод с повышенной яркостью */
highvideo();
```
2023-08-16 16:06:52 +03:00
## `int movetext(int left, int top, int right, int bottom, int newleft, int newtop)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `movetext()` перемещает часть текста по экрану.
Текст берется из прямоугольника с левым верхним углом
в точке с координатами `left`, `top` и правым нижним углом
в точке с координатами `right`, `bottom`.
Точка положения нового верхнего угла имеет координаты
`newleft`, `newtop`. Эта функция относится не к окну, а к экрану.
Функция `movetext()` возвращает `0`,
если хотя бы одна из координат выходит за пределы допустимой области,
и ненулевое значение — в противном случае.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода передвигает содержимое прямоугольника
с левым верхним углом в точке 1, 1
и правым нижним углом в точке 8, 8 в точку 10, 10 */
movetext(1, 1, 8, 8, 10, 10);
```
2023-08-16 16:20:44 +03:00
## `void insline(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `insline()` вставляет пустую строку в текущее положение курсора.
Все строки ниже курсора сдвигаются вниз.
Эта функция предназначена только для текстового режима
и выполняет операцию вставки относительно текущего текстового окна.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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;
}
```
2023-08-16 16:06:52 +03:00
## `void gotoxy(int x, int y)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `gotoxy()` помещает курсор текстового экрана в точку с координатами х, у.
Если хотя бы одна из координат недействительна, то никаких действий не выполняется.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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;
}
```
2023-08-16 16:06:52 +03:00
## `void gettextinfo(struct text_info *info)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `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; /* курсора */
};
```
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент получает текущие установки текста */
struct text_info i;
gettextinfo(&i);
```
2023-08-16 16:06:52 +03:00
## `int gettext(int left, int top, int right, int bottom, void *buf)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `gettext()` копирует текст из прямоугольника
с левым верхним углом в точке `left`, `top`
и с правым нижним углом в точке с координатами `right`, `bottom`.
Текст копируется в буфер, на который указывает переменная `buf`.
Координаты относятся не к окну, а к экрану.
Необходимое количество памяти для хранения области экрана вычисляется по формуле
`число_байт = строки * столбцы * 2`.
Причина, по которой необходимо умножить число столбцов на число строк
и умножить это произведение на `2`, заключается в том, что каждый символ,
выводимый на экран, требует для хранения **2 байта**:
1 байт для самого символа и 1 байт для его атрибутов.
Функция возвращает в случае успеха `1` и `0` при ошибке.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода копирует область экрана в память,
на которую указывает параметр buf */
buf = malloc(10 * 10 *2);
gettext(10, 10, 20, 20, buf);
```
2023-08-16 16:06:52 +03:00
## `void delline(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `delline()` удаляет строку в активном окне, которая содержит курсор.
Все линии ниже удаляемой поднимаются вверх.
Надо помнить, что если текущее окно меньше целого экрана,
то воздействие оказывается только на текст в окне.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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;
}
```
2023-08-16 16:06:52 +03:00
## `int cscanf(char *fmt, ...)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `cscanf()` работает так же, как и функция scanf(),
за исключением того, что она читает информацию с консоли вместо `stdin`.
Она не может быть перенаправлена. Относительно подробностей следует обратиться
к описанию функции `scanf()`.
Функция `cscanf()` возвращает число аргументов, которым были присвоены значения.
Это число не включает пропущенные поля. Функция `cscanf()` возвращает значение `EOF` в случае,
если была сделана попытка чтения за пределами конца файла.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент кода читает с консоли строку и число с плавающей точкой */
char str[80];
float f;
cscanf("%s%f", str, &f);
```
2023-08-16 16:06:52 +03:00
## `int cputs(const char *str)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `cputs()` выводит в текущее текстовое окно строку,
на которую указывает параметр `str`.
Ее вывод не может быть перенаправлен,
и она автоматически предотвращает пересечение границ окна.
Функция возвращает последний символ, либо величину `EOF` в случае возникновения ошибки.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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('|');
}
}
```
2023-08-16 16:06:52 +03:00
## `int cprintf(const char *fmt, ...)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `cprintf()` работает так же, как и функция `printf()`,
с тем только отличием, что она пишет в текущее окно вместо `stdout`.
Ее вывод не может быть перенаправлен, и она автоматически предотвращает вывод за пределы окна.
Относительно подробностей следует обратиться к описанию функции `printf()`.
Функция `cprintf()` не преобразует символ новой строки (`\n`)
в пару **перевод строки — возврат каретки**,
как это имеет место в случае функции `printf()`.
Поэтому необходимо явным образом ставить символ возврата каретки (`\r`),
если в этом есть необходимость.
Функция `cprintf()` возвращает число фактически выведенных символов.
Отрицательное возвращаемое значение означает наличие ошибки.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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;
}
```
2023-08-16 16:06:52 +03:00
## `void clreol(void)` и `void clrscr(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `clreol()` очищает строку от текущей позиции курсора и до конца строки активного окна.
Позиция курсора не изменяется.
Функция `clrscr()` полностью очищает активное текстовое окно
и помещает курсор в левый верхний угол (1, 1).
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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;
}
```
2023-08-16 16:06:52 +03:00
## `int kbhit()`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Эта функция не определена стандартом ANSI C.
Функция `kbhit()` возвращает истину, если нажата какая-либо клавиша на клавиатуре.
В противном случае возвращается 0.
В любом случае код клавиши не удаляется из входного буфера.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши */
while(!kbhit()); /* ожидание нажатия клавиши */
```
2023-08-16 16:06:52 +03:00
## `int ungetch(int ch)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Эта функция не определена стандартом ANSI С. Она не может использоваться в программах Windows.
Функция `ungetch()` возвращает символ, заданный младшим байтом `ch`,
обратно во входной буфер консоли.
При следующем обращении к функции ввода с консоли этот символ будет считан снова.
Между двумя последовательными операциями ввода может быть возвращен обратно только один символ.
Возвращаемое значение равно `ch` в случае успеха и `EOF` — при неудаче.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```c
/* Приведенная ниже программа вводит клавишу, отображает ее на экране,
затем возвращает ее во входной буфер, снова считывает и выводит на экран */
#include <stdio.h>
#include <conio.h>
int main() {
char ch;
ch = getch(); // получение нажатия
putch(ch); // вывод клавиши
ungetch(ch); // возврат в буфер
ch = getch(); // получение той же клавиши еще раз
putch(ch); // вывод клавиши еще раз
return 0;
}
```
2023-08-16 16:06:52 +03:00
## `int getch(void)` и `int getche(void)`
2023-08-16 16:02:33 +03:00
2023-08-16 16:06:52 +03:00
### Описание:
2023-08-16 16:02:33 +03:00
Функция `getch()` возвращает очередной символ, считанный с консоли,
но не выводит этот символ на экран.
Функция `getche()` возвращает очередной символ, считанный с консоли,
и выводит этот символ на экран.
Ни одна из этих функций не определена стандартом ANSI С.
2023-08-16 16:06:52 +03:00
### Пример:
2023-08-16 16:02:33 +03:00
```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));
```