Біьша група функцій Turbo C для вводу з клавіатури –
це функції потокового та префіксного вводу (див. гл.3). Відмітимо, що вони
використовують функцію AH=3Fh MS-DOS з префіксом файлу
стандартного вводу 0. Так як стандартний драйвер
консолі підтримує MS-DOS- клавіші редагування
(див. раніше описані функції 0Ah), при використанні цих
функцій особливим способом оброблюються клавіші ESC, F3 i F5. Однак всі остальні
спеціальніклавіші ігноруються. Звідси слідує, що використовуючи функції вводу, прототипи котрих поміщені в файлі
<stdio.h>, неможливо виконати,
наприклад, вводсимволів,що не відображається на екрані, „обійти” обробку
реакції на натиснення комбінаційї клавіш Ctrl-Break, визначити натиснення
спеціальних клавіш. Для виконання таких дій
використовуються функції Turbo C, прототипи котрих
поміщені в файлі <conio.h>. Вони не являються
частиною ANSI- стандарту мови і входять в розширення Turbo C. Функції, перш за все,
розраховані на побудову найпростішого віконного інтерфейсу
і тому при будь-якому виводі на екран (в тому числі, і „дублювання”) додатково
коректуються змінні, що зберігають поточні координати курсора активного вікна
(див. 9.5). Крім того, є можливість управління кольором виводу. Далі дається
опис файлу <conio.h>, що назначені для вводу
символу з клавіатури, і приклади використання цих функцій.
#include<conio.h>
char *cgets ( char*str)
Поміщає в буфер, на початок котрого вказує str, стоку символів зі
стандартного вводу. Запис символів виконується з str[2]; str[0] повинен вклучати максимальне символів, котре повинно бути
прочитано і записано в стрічку. Використовує MS-DOS- функцію 0Ah, але символ CR перетворюється символ ‘\0’, створюючи конкретну ASCIIZ- строку. Функція
повертає покажчик на початок буферу str. Перерахуємо достоїнства цієї функції в порівнянні
з gets():
1)
можливість визначення при вводі довжини строки;
2)
захист при вводі від „зайвих” символів, для котрих
компілятором не зарезервовано місце;
3)
можливість вводу за одне звернення до функції строк, довжина котрих перевищує встановлений по замовчанню буфер для
стандартного вводу в 128 символів.
Приведемо приклад використання функції cgets() вводу строки до 254 символів за одне
звернення до MS-DOS:
/*L7_1.C*/
#Include<conio.h>
#Include<stdio.h>
void main (void)
{ char str[256];
str[0] = 254;
cgets(str);
printf(“Введено %d символів
строки %s\n”,str[1], &str[2]);
}
#Include<conio.h>
int cscanf(
char*format [ , argument, … ])
Виконує форматований ввід з клавіатури (див. п.3.2.7). В отличие от функции scanf() не выполняет буферизацию ввода: все символы,
вводимые с клавиатуры, доступны программе немедленно. Ввод пробела
рассматривается как завершение ввода. Работает через функцию AH=07h MS-DOS. «Эхо» ввода на экране
выполняет Turbo C.
#Include<conio.h>
int getch(void)
Выполняет ввод с клавиатуры через функцию MS-DOS AH=07h. Turbo C не выполняет «эха» ввода. В
этой связи полезна для организации интерфейса с пользователем, при котором
нажатие той или иной клавиши вызывает немедленную реакцию программы без отображения введённого символа на экране.
#include <conio.h> int
getchar(void)
Виконує
небуферизоване введення з клавiатури через функцію MS-DOS AH=07h. Turbo С
"відлунює" введення на екрані. Переведення рядка відбувається при
досягненні правої вертикальнї границі поточного активного вікна.
Наведемо
приклад програми, що ілюструє застосування функцій getch() і getche() для
визначення натиснень не тільки ASCII-клавіш, але і спеціальних клавіш:
/*L7_2. C*/
#include <conio.h>
#include <stdio.h>
void main(void) {
int ch;
do {puts (" Натисніть любу клавішу...");
if(!(ch=getch())) {ch=getch(); printf("Спеціальна клавіша"\
"Розширений скэн-код %#u\n", ch);}
else
printf("Символьная клавіша %c"\
" (Код %#u)\n", ch, ch); puts ("
Продовжуєте? (y/n) ");
}
while((ch=getch())=='У' || ch=='y');
#include <conio. h> int
kbhit(void)
Перевіряє, чи
порожній буфер клавiатури. Якщо в буфері є символи, функція повертає ненульове
значення, в противному випадку вона повертає 0. Використає функцію 0Bh MS-DOS.
Є зручним засобом відвертання
"зацикливания" або "повисания" при очікуванні неможливї в
даний момент події. Крім Того, при виконанні фікції 0Bh здійснюється перевірка
натиску комбінації Ctri-Break, що дозволяє виконати аварійне завершення
програми.
#include <conio, h>
int ungetch (int ch)
Записує
безпосередньо в буфер клавiатури символ ch. Він буде доступний при виконанні
наступної операції читання з консолі (функціями файлу <conio. h>.
Дозволяє розміщувати тільки один символ, що не повинен співпадати з константою
EOF, описаної в файлі <stdio. h>. У випадку
успіха функція повертає ch; в противному випадку повертається -1
Наведемо
приклад програми, що розміщує рядок символ за символом в буфер клавiатури.
Рядок після цього читається і виводиться на екран.
/*L7_4. C*/
#include
<conio.h>
#include <stdio.h>
void main (void)
{char string "'ТЕСТОВИЙ рядок для виведення на
екран";
while
(*stnng){
ungetchf*
string -); puichar (getch());
}
}
![]() |
![]() |
![]() |