Zum Inhalt springen

Tastatureingabe


~tine~

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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