conio.h, alebo ENTER a problémy s ním
Viacerí z vás narazili pri riešení úloh na problém, ako načítať aktuálne stlačenú klávesu bez toho, aby ste museli jej stlačenie potvrdiť . Typicky ide o ovládanie programu (voľby z menu, koniec programu, klávesy F1, F2 a pod.).
Pri použití klasických funkcí ako napr. getchar() musíte na konci zadávani údajov stlačiť Enter. Bez toho funkcia neskončí a zbytočne tak komplikuje komunikáciu.
Jedno z možných riešení je použitie vstupno-výstupných funkcií z knižnice conio.h podobne ako v nasledujúcej ukážke.
#include <conio.h> // V tejto kniznici najdete co potrebujete
#include <stdio.h>
int main()
{
char ch;
do
{
if(kbhit()) // Ak je nieco stlacene
{
ch = getch(); // Tak to nacitame do ch
switch(ch) // A potom testujeme…
{
case ‘1’: printf(“Ahoj”); // Ak ch == ‘1’ => Ahoj
break;
case ‘2’: printf(“Hello”); // Ak ch == ‘2’ => Hello
break;
case 13 : printf(“\n”); // Finta s koncom riadku
break;
default: printf(“%c”,ch); // Inac zobraz pismenko
}
}
} while(ch != 27); // Stale dokola, az po <ESC>
printf(“\n\nKoniec…\n\n”);
return 0;
}
Pozor: najprv sa snažte program pochopiť, potom si naštudujte ako dané funkcie fungujú v msdn a až potom ich použite vo vlastnom programe.
Pri práci s týmito funkciami zistíte, že majú oproti getchar()
aj ďalšie príjemné vlastnosti – napríklad dokážu zistiť aj kódy funkčných a špeciálnych kláves. Je tu však malý zádrhel: v prípade, že stlačíte napríklad [F1], funkcia getch()
vráti hodnotu 0 (čím signalizuje stlačenie niečoho špeciálneho) a kód klávesy musíte zistiť ešte jedným čítaním. Podobne je to aj ak stlačíte napríklad šipku nahor: tiež sa prečítajú dva znaky, lenže prvý nie je nula, ale 0xE0
a druhý je opäť kód klávesy.
Ešte jeden malý zádrhel je s klávesou Enter, ktorá vracia tiež vždy dva znaky: návrat na začiatok riadku (CR) a posun na ďalší riadok (LF). Našťastie v C-čku týmto dvom znakom zodpovedá zasa len jeden znak: \n
.
Tip: Najlepšia možnosť, ako to pochopiť, je skúsiť si to. Stiahnite a vyskúšajte si vzorový program na prácu s klávesnicou a knižnicou conio.h
V ňom je vidno, ako sa načítavajú bežné i špeciálne znaky z klávesnice.
Výstup vzorového programu.