Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемЮрий Приклонский
1 Консольне введення даних За призначенням клавіші клавіатури можна поділити на групи: – символьні; – клавіші керування: Home, End, …, Delete та чотири стрілки; – функціональні: F1, F2, …, F12; – шифт-клавіші: Shift, Alt, Ctrl; – перемикальні (тригерні) клавіші: NumLock, CapsLock, … – спеціальні клавіші: Pause/Break, … Керування роботою клавіатури здійснює контролер. При натисненні на клавішу контролер передає в процесор запит на переривання і номер клавіші (скен – код).
2 При натисненні клавіш перших трьох груп, у буфер клавіатури заноситься двобайтовий код. У разі символьних клавіш молодший байт цього коду дорівнює ASCII – коду символа. У старший байт – записується скен-код натиснутої клавіші. Якщо ж натиснуто функціональну клавішу, клавішу керування або комбінацію з клавішею Alt, Ctrl, то в буфер записується двобайтовий код, молодший байт якого дорівнює нулю, а старший – розширеному ASCII – коду клавіші. Окреме натиснення перемикальних клавіш, шифт-клавіш не змінює вміст буфера, оскільки ці клавіші призначені для розширення функцій інших.
3 Функції консольного введення даних На відміну від стандартних функцій потокоорієнтованого введення даних, функції введення, оголошені в, не виконують проміжної буферизації, а зчитують дані безпосередньо з буфера клавіатури ФункціяПризначення cgets()Введення символьного рядка cscanf()Форматне введення даних getch()Введення одного символа без відображення getche()Введення одного символа з відображенням getpass()Введення пароля kbhit()Перевірка натискання довільної клавіші ungetch()Повернення натискання у буфер клавіатури
4 Функція getch() повертає ASCII – код, якщо натиснено символьну клавішу, або нуль, якщо натиснено клавішу керування, функціональну або клавішну комбінацію. У цьому випадку потрібно ще раз викликати функцію для отримання розширеного ASCII – коду. Приклад: функція, яка відстежує натискання на клавішу Esc, клавіши стрілок, Home та End, і пересуває курсор у відповідну позицію. #include #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 */ case 80: if (y
7 Функція kbhit () перевіряє, чи відбулось натиснення на клавіші ( точніше, чи є в буфері незчитані символи). Повертає нуль, якщо буфер порожній, та ненульове значення, якщо в буфері є символи. Звертання до функції не зупиняє виконання програми та не зчитує символів з буфера клавіатури. За допомогою функції можна забезпечити циклічне виконання потрібних дій, поки не буде натиснуто довільну клавішу: do { …… } while ( ! kbhit () );
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.