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));
|
|
|
|
|
```
|