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.

Vystup programu
Výstup vzorového programu.

Tip: podrobný manuál k tejto knižnici je priamo v C, alebo na [msdn]. Prípadne sa pozrite aj sem.

Close Menu