Veröffentlicht 13. Mai 200619 j Hallo, ich habe folgendes Problem beim Einlesen von Tastatureingaben: Die Benutzereingabe wird in einer char-Variablen gespeichert. Gibt der Benutzer etwas anderes als die Buchstaben n,j,oder b ein, kommt eine erneute Aufforderung zur Eingabe. Das ganze funktioniert auch wunderbar, solange der Benutzer Buchstaben oder Zahlen eingibt. Wird aber nur Enter gedrückt oder Sondertasten wie Esc, Shift usw. bleibt das Programm nach Drücken von Enter stehen. Hat jemand eine Idee, wie ich dafür sorgen kann, dass auch beim Drücken dieser Tasten die Aufforderung zur Eingabe wiederholt wird? tine
14. Mai 200619 j Das Drücken der Umschalttaste sollte gar nichts bewirken. Zeig doch mal, wie du einliest. Und was genau heißt "bleibt stehen"?
14. Mai 200619 j Eben, es bewirkt nichts, das ist ja das Problem. Die Eingabe wird folgendermaßen eingelesen: char wahl; do { cout << "Eingabe "; cin >> wahl; if(wahl != 'n' && wahl != 'j' && wahl != 'b') cout << "Falsche Eingabe."; }while(wahl != 'n' && wahl != 'j' && wahl != 'b'); Solange nicht n,j oder b gedrückt wurde, wird die Fehlermeldung ausgegeben und erneut zur Eingabe aufgefordert. Funktioniert wie gesagt auch, es sei denn der Benutzer drückt eben Esc, Shift ... oder nur Enter. In den Fällen springt der Cursor in die nächste Zeile und mehr passiert nicht - kein erneuter Schleifendurchlauf. tine
14. Mai 200619 j es sei denn der Benutzer drückt eben Esc, Shift ... oder nur Enter. In den Fällen springt der Cursor in die nächste Zeile und mehr passiert nicht - kein erneuter Schleifendurchlauf.Das liegt daran, dass cin >> wahl; erst dann zurückkommt, wenn auch wirklich ein Zeichen eingegeben wurde. Weder Escape noch die Umschalttaste erzeugen hier ein Zeichen, und die Eingabetaste schließt die Eingabe nur ab. Du könntest z.B. mit getline in einen String einlesen und diesen prüfen: string wahl; do { cout << "Eingabe "; getline(cin, wahl); if(wahl != "n" && wahl != "j" && wahl != "b") cout << "Falsche Eingabe."; }while(wahl != "n" && wahl != "j" && wahl != "b");[/code] Dafür brauchst du <string>. Ein string kann - im Gegensatz zu char - auch eine leere Eingabe aufnehmen.
14. Mai 200619 j Dann werde ich es wohl mit string machen müssen. Hatte gehofft, dass es auch mit char machbar ist. Danke für die Hilfe, tine
14. Mai 200619 j naja kommt drauf an. Du könntest z.B. getch() verwenden. Das ist aber dann Betriebssystemabhängig
15. Mai 200619 j Hallo, sofern getch() auf der Standardbibliothek basiert (siehe Beispiel K&R), sollte die Funktion unabhängig vom Betriebssystem sein. Nic
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.