~tine~ Geschrieben 13. Mai 2006 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 14. Mai 2006 Teilen 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"? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
~tine~ Geschrieben 14. Mai 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 14. Mai 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 14. Mai 2006 Teilen Geschrieben 14. Mai 2006 Allerdings würdest du dann nicht nur ein Zeichen sondern eine Zeichenkette einlesen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
~tine~ Geschrieben 14. Mai 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 14. Mai 2006 Teilen Geschrieben 14. Mai 2006 naja kommt drauf an. Du könntest z.B. getch() verwenden. Das ist aber dann Betriebssystemabhängig Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 15. Mai 2006 Teilen Geschrieben 15. Mai 2006 Hallo, sofern getch() auf der Standardbibliothek basiert (siehe Beispiel K&R), sollte die Funktion unabhängig vom Betriebssystem sein. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
~tine~ Geschrieben 15. Mai 2006 Autor Teilen Geschrieben 15. Mai 2006 Hab es jetzt mit string realisiert. Danke für die Hilfe euch allen. tine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.