~tine~ Geschrieben 13. Mai 2006 Geschrieben 13. Mai 2006 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
Klotzkopp Geschrieben 14. Mai 2006 Geschrieben 14. Mai 2006 Das Drücken der Umschalttaste sollte gar nichts bewirken. Zeig doch mal, wie du einliest. Und was genau heißt "bleibt stehen"?
~tine~ Geschrieben 14. Mai 2006 Autor Geschrieben 14. Mai 2006 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
Klotzkopp Geschrieben 14. Mai 2006 Geschrieben 14. Mai 2006 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.
Guybrush Threepwood Geschrieben 14. Mai 2006 Geschrieben 14. Mai 2006 Allerdings würdest du dann nicht nur ein Zeichen sondern eine Zeichenkette einlesen
~tine~ Geschrieben 14. Mai 2006 Autor Geschrieben 14. Mai 2006 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
Guybrush Threepwood Geschrieben 14. Mai 2006 Geschrieben 14. Mai 2006 naja kommt drauf an. Du könntest z.B. getch() verwenden. Das ist aber dann Betriebssystemabhängig
nic_power Geschrieben 15. Mai 2006 Geschrieben 15. Mai 2006 Hallo, sofern getch() auf der Standardbibliothek basiert (siehe Beispiel K&R), sollte die Funktion unabhängig vom Betriebssystem sein. Nic
~tine~ Geschrieben 15. Mai 2006 Autor Geschrieben 15. Mai 2006 Hab es jetzt mit string realisiert. Danke für die Hilfe euch allen. tine
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden