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` представляет собой закодированную информацию о цвете.
|
||
Способ кодировки представлен ниже.
|
||
|
||
![](data:image/png;base64,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)
|
||
|
||
При установке значения 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));
|
||
```
|