Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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

Hab es jetzt mit string realisiert.

Danke für die Hilfe euch allen.

tine

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.