kbhit() wieder reseten ...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • kbhit() wieder reseten ...

    Hi!
    Ich brauche eine Tastaturabfrage, nur sind meine Ergenisse bisher nicht so überzeugend...

    Quellcode

    1. #include <dos.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <iostream.h>
    5. main()
    6. {
    7. int weiter = 1 ;
    8. char text[21];
    9. char ch;
    10. strcpy (text,"^[1;1H***");
    11. system("cls");
    12. cout<<"*[YESSS] [No]";
    13. while( weiter )
    14. {
    15. cout << "\nTastendruck!! Ende bei ESC : " ;
    16. if (kbhit())
    17. {
    18. do
    19. {
    20. ch = getch();
    21. } while (kbhit());
    22. }
    23. switch( ch )
    24. {
    25. case 13 : cout << "\nEntertaste!!" ;
    26. break ;
    27. case 9 : cout << "\nTabulatortaste!!" ;
    28. break ;
    29. case 'a':
    30. case 'e':
    31. case 'i':
    32. case 'o':
    33. case 'u': cout << "\nVokal!!" ;
    34. break ;
    35. kbhit()=NULL;
    36. case 75:
    37. case 72: system("cls");
    38. cout<<"[YESSS] [No]";
    39. break;
    40. case 77:
    41. case 80: system("cls");
    42. cout<<"[Yes] [NOOO]";
    43. break;
    44. case 27: weiter=0;
    45. break;
    46. }
    47. }
    48. cout<<"schnack!";
    49. system("PAUSE");
    50. return EXIT_SUCCESS;
    51. }
    Alles anzeigen


    Soo wenn ich das nun laufen lasse spuckt der mir immer wieder die selbe Zeile aus, was natürlich wegen des Flackerns recht nervig ist...wie kann ich die kbhit()-geischte wieder reseten, damit der nicht immer weider die case-geschichte durchläuft ? kbhit()=null bringt natürlich nix :(
    irgendwelche vorschläge ? ...
  • Ich meine kbhit kann man resetten indem man die Funktion in einer anderen Funktion aufruf, kbhit wird durch den rückgabewert von der anderen Funktion wieder resettet

    Quellcode

    1. void blablabla()
    2. {
    3. ....kbhit()...
    4. }
    5. void main
    6. {
    7. blablabla()
    8. }

    so mit Pseudocode =)
  • Dann mal ein paar Kommentare zu dem Beispiel-Text.
    Nur auf die Schnelle, ohne Anspruch auf Fehlerfreiheit ;)

    Der Autor sollte sich entscheiden ob C oder C++
    Zeile 6 -> ??? main ja einige Compiler schlucken das, aber int main() entspricht eher den Spielregeln.
    Zeile 16 -> wenn er das richtig mit ESC = Ende programmiert brauch man kein system( Pause ) oder getch() oder sonstige Klimmzüge ;)
    Zeile 37 -> wird nie erreicht -> Compiler sollte so angesteuert werden, das eine Warnung angezeigt wird.

    Rein opitisch geht das mit dem formatieren des Quellcodes besser zu lösen.

    Hab es nicht getestet - vermute ehe er die Tasten 72, 75, 77 und 80 abfragen kann, muss vorher noch eine Abfrage ergänzt werden.
    Vielleicht auch noch switch - default ergänzen, damit man fehlerhafte Eingaben schneller erkennen kann.
    Geht natürlich auch mit Debugger
    oder, wenn selbst erklärende Kommentare wie etwa: Pfeil-nach-rechts Taste oder so eingefügt werden zu Testzwecken.

    MfG