c++ Tastatur Eingabe während sleep() deaktivieren?
Vorab der code:
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
double zahl1;
double zahl2;
cout << "Mit diesem Programm koennen sie Ganzzahlen addieren! \n";
sleep(3);
cout << "Bitte geben sie eine Ganzzahl ein! \n\n";
cin >> zahl1;
cout <<endl <<endl;
cout << "Bitte geben sie noch eine Ganzzahl ein! \n\n";
cin >> zahl2;
cout <<endl <<endl;
cout << "Ihr Ergebnis ist ";
cout << zahl1+zahl2;
cout << "!\n";
system ("pause");
}
Jetzt hier mein Problem: Während sleep() kann der User immernoch Eingaben tätigen also in diesem fall Zahlen eingeben. Wie kann ich die Eingabe der Tastatur deaktivieren / später im code dann wieder aktivieren?
1 Antwort
Mal abgesehen davon, dass das Sleep hier völlig sinnlos ist: Ja, die Benutzereingaben werden gepuffert, bis das Programm sie wieder verarbeiten kann. Eine Möglichkeit, das zu verhindern wäre, eine Schleife zu bauen, welche die Tastatureingaben annimmt aber schluckt und diese Schleife so lange laufen zu lassen, bis die gewünschte Wartezeit verstrichen ist. So bleibt das Programm quasi "responsive", aber tut einfach nichts mit den Eingaben.
Wozu an dieser Stelle aber warten? Gib doch gleich alles aus, dann hast Du das Problem nicht.
Ja, das habe ich schon verstanden. Aber dann muss Du eben das tun, was ich beschrieben habe oder aber den Tastaturpuffer leeren. Der einfachste Weg, das zu tun ist:
while(kbhit())
getch();
Benötigt den Import von conio.h.
Vielen Dank, funktioniert so wie gedacht. Kannst du vielleicht wenn du kurz Zeit hast sagen wie die while schleife funktioniert? Weiss nur dass getch / kbhit iwas mit Eingabe und Prüfung ob der Benutzer eine Taste drückt zu tun hat. Danke nochmal.
Richtig. kbhit prüft, ob eine Taste gedrückt wurde (was für jede gepufferte Eingabe ja der Fall ist). getch ruft dann das entsprechende Zeichen aus dem Tastaturpuffer ab. Da getch blockieren und auf eine Eingabe warten würde, wenn nichts mehr im Puffer ist, macht man das eben nur, wenn auch was im Puffer ist. Damit ist der Puffer nach der Schleife leer.
Ich spiel nur ein bisschen rum, bin ganz neu zum Programmieren, sleep war gedacht damit der User erst den Text ganz oben ließt und danach die Zahl eingeben kann.