Біьша група функцій 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());
  }
}