Kleines Problem mit einer Menüschleife



  • schönen guten abend
    habe ein kleines problem mit meinem quelltext (wer hätte es gedacht 🙄 )
    es geht um eine menüschleife mit switch-case
    wenn eben die richtige eingabe nicht dabei war, default: nehme ich an, soll er wieder von vorn beginnen, d.h. ich habe die switch-case in eine schleife reingepackt
    aber das will nicht so, wie ich will, schauts euch einfach mal an:

    cin>>e;
    do
    {
    switch (e)
    {
    case 1:
    	//Ausgabe der Zahlen der größe nach steigend!
    	cout<<"\nAusgabe der Zahlen der Gr\x94 \b\xE1 \be nach steigend:"<<endl;
    	cout<<setw(8)<<left<<z<<right<<" /\\ "<<endl<<setw(8)<<left<<y<<right<<"/  \\"<<endl<<setw(8)<<left<<x<<right<<"----"<<endl;
    	t=2;
    	break;
    case 2:
    	//Ausgabe der Zahlen der größe nach fallend!
    	cout<<"\nAusgabe der Zahlen der Gr\x94 \b\xE1 \be nach fallend:"<<endl;
    	cout<<setw(8)<<left<<"____"<<right<<x<<endl<<setw(8)<<left<<"\\  /"<<right<<y<<endl<<setw(8)<<left<<" \\/ "<<right<<z<<endl;
    	t=2;
    	break;
    case 3:
    	mittelwert=((double)x+(double)y+(double)z)/3;
    	cout<<"\nDer Mittelwert der 3 Zahlen ist "<<mittelwert<<endl;
    	t=2;
    	break;
    case 4:
    	median=y;
    	cout<<"\nDer Median der 3 Zahlen ist "<<median<<endl;
    	t=2;
    	break;
    case 5:
    	cout<<"\nDas Programm wird beendet!"<<endl;
    	i=2;
    	t=2;
    	break;
    default:
    	cout<<"\nBitte geben Sie ihre Eingabe erneut ein!"<<endl;
    }
    }
    while(t==1);
    

    was müsste ich eurer meinung nach ändern, dass er mir die default anweisung nicht dauernd am bildschirm wiederholt sondern er von oben anfängt
    p.s.: mit goto würde es gehen, hab ich schon probiert, aber diese variante scheint mir eher unelegant 😃

    besten dank
    pipimaxi



  • aber das will nicht so, wie ich will

    ist keine gute fehlerbeschreibung...

    Aber für dich:
    Pack das cin>>e; in die schleife mit rein 😉

    Die switch verzweigung brauchst du da auch nicht unbedingt drin - du kannst einfach per

    do{
    cin>>e;
    }while(!(1<=e && e<=5)); // bzw. while(e<1 || 5<e); nach DeMorgan.... aber halt damit du siehst was ich meine
    

    solange eine eingabe fordern bis das richtige eingegeben wurde

    Wenn du aber bei jeder erneuten Eingabe die Berechnungen und Ausgaben erneut haben willst musst du alles in die Schleife packen



  • perfekt danke, funktioniert
    die switch-case muss mit rein, weil das so in der aufgabenstellung stand ^^
    aber hauptsache meine schleife funktioniert jetzt richtig 🙂



  • In Zukunft Fragen zu C++ bitte in diesem Forum posten:

    http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html

    🙂



  • Pipimaxi schrieb:

    ...
    cout<<setw(8)<<left<<"____"<<right<<x<<endl<<setw(8)<<left<<"\\  /"<<right<<y<<endl<<setw(8)<<left<<" \\/ "<<right<<z<<endl;
    ...
    

    ...und für sowas nimm besser 'printf'. dann sieht's nicht mehr so scheusslich aus.
    🙂



  • Na, kein printf nehmen. Brich es lieber vernünftig um.



  • ihoernchen schrieb:

    Brich es lieber vernünftig um.

    dadurch wirds auch nicht besser. der richtige c++-freak hätte jetzt 'boost format' empfohlen.
    🙂



  • Besser nicht, aber auch nicht schlechter wie im Falle von fprint 😉



  • ihoernchen schrieb:

    Besser nicht, aber auch nicht schlechter wie im Falle von fprint

    was wird dadurch schlechter?
    🙂



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten