Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] kbhit - switch

Ostatnio zmodyfikowano 2016-02-03 14:04
Autor Wiadomość
Harion
Temat założony przez niniejszego użytkownika
[C++] kbhit - switch
» 2016-02-03 13:52:56
Witajcie, mam mały problem.
Robię funkcję do wprowadzania danych z klawiatury, w sensie MENU.
Wszystko śmiga jak należy jednak zastanawiam się jak rozwiązać problem w przypadku "down użytkownika" który będzie walił bezmyślnie rękami w klawiaturę.
Gdy wciśniemy kilka przycisków na raz to nieraz pętla się wiesza, tak jak by bufor się zapychał czy coś w tego rodzaju (muszą być to klawisze z zakresu deflaut switcha, bo w przypadku liczb 1-5 kończymy funkcję), przy takim zawieszeniu ciągle wypisywane jest na konsole "Wrong key"
Wiecie jak to rozwiązać? Bo ja już nie mam pomysłu.
Oto kod:

C/C++
void menuLoadGame()
{
    int numberFalse = 1;
    int key;
   
    printLoadGame();
   
    for(;; )
    {
        if( _kbhit )
        {
            key = _getch();
            numberFalse = 0;
           
            switch( key )
            {
            case '1':
                cout << "[1] Start Game" << endl;
                break;
            case '2':
                cout << "[2] Start Game" << endl;
                break;
            case '3':
                cout << "[3] Start Game" << endl;
                break;
            case '4':
                cout << "[4] Start Game" << endl;
                break;
            case '5':
                cout << "[5] Start Game" << endl;
                break;
            case 'ESC':
                cout << "[6] Start Game" << endl;
                break;
            default:
                numberFalse = 1;
                cout << "\rWrong key!";
                Sleep( 300 );
                cout << "\r             \r";
                break;
            }
           
            if( !numberFalse )
                 break;
           
        }
    }
}

Dziękówa za pomoc!

PS. Małe pytanko jeszcze, czy nie używając żadnych bibliotek typu WinAPI itp, można sterować pozycją kursora w konsoli? Tak jak np /r powraca na początek linii, czy jest coś co by mogło np przenosić kursor linię wyżej?
P-144405
pekfos
» 2016-02-03 14:04:46
C/C++
case 'ESC'
Nie możesz zrobić czegoś takiego.

przy takim zawieszeniu ciągle wypisywane jest na konsole "Wrong key"
Opróżnij bufor po zakończeniu wyświetlania tego komunikatu.

Małe pytanko jeszcze, czy nie używając żadnych bibliotek typu WINapi itp, można sterować pozycją kursora w konsoli? Tak jak np /r powraca na początek linii, czy jest coś co by mogło np przenosić kursor linię wyżej?
Bez dodatkowych bibliotek się nie da, a za takie mordowanie tego skrótu, powinieneś się za karę zapoznać z WinAPI. Użycie jednej funkcji z biblioteki, którą i tak wykorzystujesz w programie, to chyba nie jest zbyt trudne.
P-144406
« 1 »
  Strona 1 z 1