Es hängt etwas im eingabestrom!



  • Hallo,

    habe ein kleines Problem:

    int main()
    	{	
    		char op,wahl='j';
    		bruch b1,b2,erg;
    		int ggt;
    		do
    		{	
    		cout<<"Programm Bruchrechnung"<<endl;
    		cout<<"Eingabe des 1. Bruches:"<<endl;
    	    eingabe(b1);
    	    cout<<"Eingabe des 2. Bruches:"<<endl;
    	    eingabe(b2);
    	    operator_eingeben(op);
    	    erg= berechne(op, b1, b2);
    		ausgabe(erg);
    		cout<<"\ngekuertzt:\n";
    		kuerzen(erg);
    		ausgabe(erg);
    		cout<<"\n\nProgramm beenden (j/n)?"<<endl;
    		cin.get(wahl);
    		}
    		while (wahl != 'j' && wahl != 'J');
    		return 0;
    	}
    

    bei der Abfrag Programm beenden frägt das Programm leider nicht nach...
    ich denke er schreibt ungewöhnlich ein leerzeichen in wahl... auch wenn ich

    cin.get(wahl);
    

    mehrmals anwende kann ich zwar ein zeichen eingeben aber trotzdem bricht er bei "j" nicht ab...

    kann mir wer erklären warum nciht?

    Gruß



  • versuch vorher mal den Mist cin rauszuholen der da noch drin ist, mit cin.clear z.B.



  • hab ich mit cin.clear(); probiert, hilft leider nicht.



  • gleiches problem hier:

    inhalt i1; //struktur
    cout<<"Kapitel:";
    cin<<i1.kapitel;
    cout<<"Thema:";
    cin.getline(i1.thema,100);
    

    er springt einfach über thema drüber...



  • cin.clear() setzt auch nur die Flags zurück.

    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    


  • mit

    cin.ignore();
    

    funktionierts, danke 🙂

    Edit: "justanothernoob"^^



  • cin.ignore() ohne Parameter, funktioniert aber nur, wenn das New Line Zeichen(oder irgendein anderes Byte) das einzige war, dass noch im Buffer war.
    Mit den Parametern wird alles bis einschließlich dem nächsten new line Zeichen geleert.(Müsstest aber evtl <limits> inkludieren)



  • Gustl schrieb:

    gleiches problem hier:

    inhalt i1; //struktur
    cout<<"Kapitel:";
    cin<<i1.kapitel;
    cout<<"Thema:";
    cin.getline(i1.thema,100);
    

    er springt einfach über thema drüber...

    Entschuldigt, wenn ich mich irre, aber heißt es nicht

    cin>>i1.kapitel;
    

    anstelle von

    cin<<i1.kapitel;
    

    ? Wäre das nicht eine viel einfachere Lösung?



  • KeksX schrieb:

    Gustl schrieb:

    gleiches problem hier:

    inhalt i1; //struktur
    cout<<"Kapitel:";
    cin<<i1.kapitel;
    cout<<"Thema:";
    cin.getline(i1.thema,100);
    

    er springt einfach über thema drüber...

    Entschuldigt, wenn ich mich irre, aber heißt es nicht

    cin>>i1.kapitel;
    

    anstelle von

    cin<<i1.kapitel;
    

    ? Wäre das nicht eine viel einfachere Lösung?

    ja, ich habs kurz vom lappi abgeschrieben, hab mich da verschrieben...


Anmelden zum Antworten