Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

C++: Problem mit Tastatureingabe

Yves3 / 2 Antworten / Baumansicht Nickles

Hallo

Ich habe folgendes Problem bei meinem kleinen Testprogramm:
Wenn der User mehr als ein Zeichen eingibt, dann werden die Zeichen scheinbar der Reihe nach abgearbeitet.
Ich vermute mal das läuft so ab:
Angenommen ich gebe "abcy" ein, dann wird als erstes a in die Variable Eingabe geschrieben und dann überprüft.
Da a weder y oder Y, noch n oder N ist, wird die Frage noch einmal ausgegeben. Soweit wie gewünscht.
Jetzt wird aber der User nicht nach einem weiteren Zeichen gefragt, sondern einfach automatisch das zweite Zeichen der vorherigen Eingabe in die Variable Eingabe geschrieben. (das b)
Hier läuft wieder das Gleiche ab, genau so wie bei c.
Das y beendet die Sache schliesslich.

"Application Log? (Y/N)" wird also 3 mal ausgegeben.
Wie kann ich machen, dass nach der Überprüfung der Eingabe ein neuer Input vom User angefordert wird und nicht die weiteren Zeichen des vorherigen Inputs abgearbeitet werden?

Wie man sieht, hab ich s schon mit getch probiert.
Das funktioniert eigentlich auch, nur muss eben nicht mehr mit Enter bestätigt werden, was aber gewünscht wäre.

Wäre dankbar für Tipps! :)

  
#include <cstdio>
#include <conio.h>
#include <stringv
#include <iostream>

using namespace std;

int main()
{
char Bytewert = 0x00;
char Eingabe = 0x00;
string Text[6];
Text[0] = "Application Log? (Y/N)\n";
Text[1] = "System Log? (Y/N)\n";
Text[2] = "Security Log? (Y/N)\n";
Text[3] = "Directory Service? (Y/N)\n";
Text[4] = "DNS Server? (Y/N)\n";
Text[5] = "File Replication Service? (Y/N)\n";

for(int i=0; i<6; i++)
{
bool bQuit = false;
while(!bQuit)
{
cout << Text[i];
cin >> Eingabe;
//printf("%s", Text[i].c_str());
//Eingabe=getch();
//printf("%c\n", Eingabe);
switch(Eingabe)
{
case 'Y':
case 'y':
bQuit = true;
break;
case 'N':
case 'n':
bQuit = true;
break;
default:
break;
}
}
}

// 0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80
// 1 2 4 8 16 32 64 128
return 0;
}
bei Antwort benachrichtigen
Yves3 Nachtrag zu: „C++: Problem mit Tastatureingabe“
Optionen

Sobald ich hier die Frage stelle, hab ich auch schon die Lösung :D

fflush (stdin);

bei Antwort benachrichtigen
d-oli Yves3 „Sobald ich hier die Frage stelle, hab ich auch schon die Lösung :D fflush stdin “
Optionen

Ja genau ;-) cin.ignore(2); funktioniert übrigens in Deinem Fall auch.

http://www.cppreference.com/cppio/index.html

d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen