Mehrfache cout Ausgabe in while Schleife unterbinden



  • Moin Freunde,
    Wie muss ich das Programm umschreiben damit "cout << "Fehlerhafte Eingabe geben sie es erneut ein!" << " nicht 4 mal hintereinander Ausgegeben wird?

    Die Schleife soll nur Solange laufen bis entweder ein J oder N eingeben wird.

    cout << "Tischdecke als Zugabe (J/N): ";
    	
    	
    	while (AuswahlTischdecke != 'N' && AuswahlTischdecke != 'J'){
    
    		cin >> AuswahlTischdecke;
    
    		if (AuswahlTischdecke == 'J') {
    			tischDecke.breite = 30;
    			tischDecke.laenge = 30;
    			break;
    		}
    
    		else if (AuswahlTischdecke == 'N') {
    			break;
    		}
    		else {
    			cout << "Fehlerhafte Eingabe geben sie es erneut ein!" << endl;
    		}
    	}


  • @Pac0 sagte in Mehrfache cout Ausgabe in while Schleife unterbinden:
    Was für eine Typ hat AuswahlTischdecke? char? Dann liest cin jeweils nur 1 Zeichen. Wenn du also "Hallo" eingibst, ist AuswahlTischdecke im ersten Durchlauf 'H', dann 'a', dann 'l', dann nochmal 'l' und dann 'o'. Wie oft hintereinander die Ausgabe kommt, hängt also von der Eingabe ab.

    Möglicherweise möchtest du mit getline gleich einen String (die ganze Zeile) lesen und diese mit dem String "J" vergleichen? (siehe auch Beispiel im Link)



  • @Pac0 Das hängt auch vom Typ von AuswahlTischdecke und möglichen vorherigen Eingaben ab.

    Evtl. ist da auch noch ein '\n' von der Entertaste im Eingabestrom.



  • @wob Stimmt, es kommt auf die Länge des char AuswahlTischdecke an.
    Das mit dem getline bekomme ich nicht zum laufen kann ich das char nicht einfach auf 1 Buchstaben begrenzen?



  • @Pac0 sagte in Mehrfache cout Ausgabe in while Schleife unterbinden:

    @wob Stimmt, es kommt auf die Länge des char AuswahlTischdecke an.
    Das mit dem getline bekomme ich nicht zum laufen kann ich das char nicht einfach auf 1 Buchstaben begrenzen?

    Die Länge von char ist immer 1 - was meinst du mit "auf 1 Bustaben begrenzen"?
    Du liest doch nur 1 (nicht-whitespace) Zeichen mit cin >> char_variable ein. Im Eingabepuffer befinden sich aber, wenn du "Hallo"(Enter) eingibst, die 5 Buchstaben von "Hallo" und das Enterzeichen. Jedes cin liest eben nur 1 Zeichen aus diesem Puffer (und überspringt dabei Whitespace, also auch Leerzeichen und Enter).

    Mit getline würdest du immer eine ganze Zeile bis zum Enter einlesen.

    Alternativ machst du HINTER deinem cin >> AuswahlTischdecke; einfach ein std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); - das schmeißt dir dann alle folgenden Zeichen bis zum nächsten Enter weg.



  • Ich würde empfehlen mit std::getline statt operator >> zu arbeiten. operator >> in Kombination mit Zeilenumbrüchen und/oder interaktiven Inputs ist immer fummelig.


Anmelden zum Antworten