Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben
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.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...