1 / 7

Консольне введення даних

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

obelia
Download Presentation

Консольне введення даних

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. 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()) /*розширений код клавіші*/ {

  6. case 77: if (x<winw) x++; break; /*натиснено ->*/ case 80: if (y<winh) y++; break; /*натиснено вниз*/ case 75: if (x>1) 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; }

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

More Related