Консольне введення даних За призначенням клавіші клавіатури можна

Скачать презентацию Консольне введення даних За призначенням клавіші клавіатури можна Скачать презентацию Консольне введення даних За призначенням клавіші клавіатури можна

5352-sl_14.ppt

  • Количество слайдов: 7

>Консольне введення даних    За призначенням клавіші клавіатури можна поділити  на Консольне введення даних За призначенням клавіші клавіатури можна поділити на групи: символьні; клавіші керування: Home, End, … , Delete та чотири стрілки; функціональні: F1, F2, … , F12; шифт-клавіші: Shift, Alt, Ctrl; перемикальні (тригерні) клавіші: NumLock, CapsLock, … спеціальні клавіші: Pause/Break, … Керування роботою клавіатури здійснює контролер. При натисненні на клавішу контролер передає в процесор запит на переривання і номер клавіші (скен – код).

>При натисненні клавіш перших трьох груп, у буфер  клавіатури заноситься двобайтовий код. У При натисненні клавіш перших трьох груп, у буфер клавіатури заноситься двобайтовий код. У разі символьних клавіш молодший байт цього коду дорівнює ASCII – коду символа. У старший байт – записується скен-код натиснутої клавіші. Якщо ж натиснуто функціональну клавішу, клавішу керування або комбінацію з клавішею Alt, Ctrl, то в буфер записується двобайтовий код, молодший байт якого дорівнює нулю, а старший – розширеному ASCII – коду клавіші. Окреме натиснення перемикальних клавіш, шифт-клавіш не змінює вміст буфера, оскільки ці клавіші призначені для розширення функцій інших.

>Функції консольного введення даних     На відміну від стандартних функцій потокоорієнтованого Функції консольного введення даних На відміну від стандартних функцій потокоорієнтованого введення даних, функції введення, оголошені в , не виконують проміжної буферизації, а зчитують дані безпосередньо з буфера клавіатури

>Функція  getch() повертає  ASCII – код, якщо натиснено  символьну клавішу, або Функція getch() повертає ASCII – код, якщо натиснено символьну клавішу, або нуль, якщо натиснено клавішу керування, функціональну або клавішну комбінацію. У цьому випадку потрібно ще раз викликати функцію для отримання розширеного ASCII – коду. Приклад: функція , яка відстежує натискання на клавішу Esc, клавіши стрілок , Home та End , і пересуває курсор у відповідну позицію. #include #define Esc 0x1b /*ASCII-код клавіші Esc*/ int MoveCursor (void) {

>int key, x, y;    int winw, winh;    int key, x, y; int winw, winh; /*розміри вікна*/ struct text_info win; /*структура параметрів вікна*/ key = getch(); /*зчитування коду клавіші*/ If (key ==Esc) return 0; /*натиснуто Esc */ else if (key != 0) return -1; /*символьну клавішу*/ gettextinfo( &win); /*параметри активного вікна*/ winw = win.winright – win.winleft + 1; /*ширина*/ winh = win.winbottom – win.wintop + 1; /*висота*/ x = win.curx; y = win.cury; /*поточні коорд. курсора*/ switch (key = getch()) /*розширений код клавіші*/ {

>case 77: if (x<winw) x++;  break;     /*натиснено ->*/ case 77: if (x*/ case 80: if (y1) x--; break; /*натиснено <-*/ case 72: if (y>1) y--; break; /*натиснено вгору*/ case 71: x = 1; y = 1; break; /*натиснено Home*/ case 79: x = winw; y =winh; break; /*натиснено End*/ default: return -1; /*інша клавіша керування*/ } gotoxy (x, y); /*перенесення курсора в нову позицію*/ return 1; }

>Функція  kbhit () перевіряє, чи відбулось натиснення  на клавіші ( точніше, чи Функція kbhit () перевіряє, чи відбулось натиснення на клавіші ( точніше, чи є в буфері незчитані символи). Повертає нуль, якщо буфер порожній, та ненульове значення, якщо в буфері є символи. Звертання до функції не зупиняє виконання програми та не зчитує символів з буфера клавіатури. За допомогою функції можна забезпечити циклічне виконання потрібних дій, поки не буде натиснуто довільну клавішу: do { …… } while ( ! kbhit () );