Wieso wird schlieffe net verlassen??



  • hi,

    bool TerminEintrag = true;
    
     while(TerminEintrag)
     {
    
            int option_1;
            cout << " Willkommen in ihrem persoenlichen Terminkalender. Moechten Sie einen neuen\n"
                 << " Termin verfassen (Tipp #1) oder wollen Sie ihre bislang eingetragenen\n"
                 << " Termine einsehen (Tipp #2)!\n\n";
            cout << " >> #";
            cin  >> option_1;
            while(true)
            {
                if(cin.fail())
                {
                    cout << "\n Bitte nutzen Sie die Optionen: #1 - Termin verfassen / #2 - Termine einsehen!\n";
                    cin.clear();
                    cin.sync();
                    continue;
                }
                if(option_1==1)
                {
                    TerminEintrag = true;
                    break;
                }
                if(option_1==2)
                {
                    TerminEintrag = false;
    
                    break;
                }
                cout << "\n Bitte nutzen Sie die Optionen: #1 - Termin verfassen / #2 - Termine einsehen!\n";
            }
    //--- TAG ----------------------------------------------------------------------
       while(true)
       {
            cout << "\n Geben Sie hier ihren Termin ein: Tag     >> ";
            cin >> ptag;
    
            if(cin.fail())
            {
    
                    cout << " Bitte geben Sie eine Zahl von 1 bis 31 an!\n\n";
                    cin.clear();
                    cin.sync();
                    continue;
            }
    
            if(0 < ptag && ptag < 32)
            {
                break;
            }
            cout << "\n";
            cout << " Fehler: \"" << ptag <<".\" ist kein Monatstag!\n\n";
       }
    
    //--- MONAT --------------------------------------------------------------------
        cout << "================================================================================";
    
        while(true)
        {
            cout << "\n Geben Sie hier ihren Termin ein: Monat   >> ";
            cin >> pmonat;
    
            if(cin.fail())
            {
    
                    cout << " Bitte geben Sie eine Zahl von 1 bis 12 an!\n\n";
                    cin.clear();
                    cin.sync();
                    continue;
            }
    
            if(0 < pmonat && pmonat < 13)
            {
                break;
            }
            cout << "\n";
            cout << " Fehler: \"" << pmonat <<".\" ist kein Monat!\n\n";
        }
    
    //--- JAHR ---------------------------------------------------------------------
    
        cout << "================================================================================";
    
        while(true)
        {
            cout << "\n Geben Sie hier ihren Termin ein: Jahr    >> ";
            cin >> pjahr;
    
            if(cin.fail())
            {
    
                    cout << "Termin nur bis 2100 speicherbar!";
                    cin.clear();
                    cin.sync();
                    continue;
            }
    
            if(heute->tm_year+1899 < pjahr && pjahr < 2101)
            {
                break;
            }
            cout << "\n";
            cout << " Fehler: \"" << pjahr <<".\" ist nicht im Kalender speicherbar (max. bis Jahr 2100)!\n\n";
        }
    //--- AUSGABE ------------------------------------------------------------------
    
            Termin aktuel;
            aktuel.SetTag(ptag);
            aktuel.SetMonat(pmonat);
            aktuel.SetJahr(pjahr);
            aktuel.Info();
            aktuel.GetTermin();
    
        int option_2;
    
        cout << "\n Wollen Sie einen weiteren Termin angeben ?\n";
        cout << " JA - #1   /   NEIN - #2     ";
        cout << " >> #";
        cin  >> option_2;
        while(true)
        {
            if(cin.fail())
            {
                cout << " Bitte die jeweilige Option mit der Ziffer 1 oder 2 bestaetigen!\n";
                cin.clear();
                cin.sync();
                continue;
            }
    
            if(option_2==1)
            {
                TerminEintrag = true;
                break;
            }
            else
            {
                TerminEintrag = false;
                break;
            }
                cout << " Bitte die jeweilige Option mit der Ziffer 1 oder 2 bestaetigen!\n ";
        }
     }
      ....
    

    wieso verlaesst er die schleife nicht und macht mit "..." weiter wenn ich ihn oben bei der abfrage "termin verfassen oder alle lesen", wenn ich 2 fuer alle lesen tippe ... geht er trotzdem zum einlesen des neuen termins... wieso? stimmt die while verwendung nicht?



  • Na er geht doch aus deiner while(true) Schleife raus. Die äußere wile(TerminEintrag) Schleife verlässt er natürlich nicht. Pro break wird auch nur eine Schleife verlassen.



  • Ich würd' die schleifen nicht versuchen mit break zu verlassen, sondern etwas in der Art:

    bool do_exit = false;
    int choice;
    
    do{ 
    
        cout << "Menu:" << endl;
        cout << "[1] One" << endl;
        cout << "[2] Two" << endl;
        cout << "[3] Exit" << endl;
    
        choice = cin.get( );
    
        if( cin.fail( ) ) {
    
            cin.clear( );
            cin.ignore( cin.rdbuf( )->in_avail( ) );
            choice = 0;
        }
    
        switch( choice ) {
    
            case 1:
    
                cout << "--> One!" << endl;
                break;
    
            case 2:
    
                cout << "--> One!" << endl;
                break;
    
            case 3:
    
                do_exit = true;
                break;
    
            default:
                cout << "Invalid input!" << endl;
        }
    
    } while( !do_exit );
    

    Greetz, Swordfish



  • Ich würde als allererstes mal diese Blöcke die mir da so komisch fast-identisch erscheinen in eine Funktion packen.


Log in to reply