menu w if else

0

Witam. Przyznam, że trochę wstydzę się tego tematu ponieważ udało mi się napisać funkcje które dodają do plików dane, sortują je alfabetycznie, wyświetlają listę oraz usuwają użytkowników w moim wypadku kontrahentów z niej. Pisze to ze względu na to że mam strasznie błahy problem powiązany z początkową fazą nauki. Siedzę nad tym drugi wieczór i niestety nie jestem w stanie go rozwiązać dlatego postanowiłem poprosić o pomoc oto kod:

void menu()
{
    int opcja;
    while(opcja != 0)
    {
        //system( "cls" );
        cout << "==========Menu==========" << endl;
        cout << "1) Kontrahenci" << endl;
        cout << "0) Zakoncz program" << endl;
        cout << "Wybierz opcje z menu: ";
        cin >> opcja;
        if(opcja == 1)
        {
            int kopcja;
            while(kopcja != 0)
            {
                cin.ignore();
                //system( "cls" );
                //lista_klientow();
                cout << "Opjce: " << endl;
                cout << "1) Dodaj nowego klienta, ";
                cout << "2) Usun klienta, ";
                cout << "3) Modyfikuj dane klienta, ";
                cout << "0) Wroc" << endl;
                cout << "Wybierz opcje z menu: ";
                cin >> kopcja;
                if(kopcja == 1)
                {
                    //nowy_klinet();
                }
                else if(kopcja == 2)
                {
                    //usun_klienta();
                }
                else if(kopcja == 3)
                {
                    cout << "Modyfikowanie " << endl;
                }
                else if(kopcja == 0)
                {
                    cout << "Wracamy do menu" << endl;
                }
                else
                {
                    cout << "Zla opcja wyboru. Sprobuj jeszcze raz" << endl;
                }
            }
        }
        else if(opcja == 0)
        {
            cout << "Koniec programu...";
        }
        else
        {
            cout << "Nie ma takiej opcji... Sprobuj ponownie...";
        }
    }
}

Problem polega na tym, że po wybraniu opcji 1 przechodzi do kolejnego menu. Następnie po wciśnięciu 0 przechodzi z powrotem do pierwszego ale wybierając ponownie opcję 1 coś jakby się zblokowało i nie mogę dojść co ponieważ nie przechodzi ponownie do drugiego menu tylko tak jakby się zapętliło. Próbowałem z cin.ignore() ale niestety nie pomogło. Prosiłbym o jakąś poradę. A! I obym nie zapomniał. Menu zostało specjalnie zrobione na if else nie na switchu.

0

Wywal: cin.ignore(), wpisz: while(cin.get()!='\n') {} po: cin >> opcja; oraz po: cin >> kopcja;
Zapoznaj się z tym: http://4programmers.net/Forum/1100492

0

Albo brak mi kompetencji, ale nie działa twoje rozwiązanie. To o czym pisałeś w temacie w linku też się przyda ale ja tymczasowo nie poszukuje takiego rozwiązania tylko rozwiązania lub odpowiedzi na pytanie dlaczego w formie przeze mnie napisanej to nie działa. Z góry dzięki za zainteresowanie.

0

Niestety nie jestem zalogowany muszę to zmienić. Doszedłem do tego co wystarczyło zmienić logiczne i proste choć wymagało dodatkowej zmiennej tj:

 int dopcja = 1;
            int kopcja;
            while(dopcja != 0)
            {
                //system( "cls" );
                //lista_klientow();
                cout << "Opjce: " << endl;
                cout << "1) Dodaj nowego klienta, ";
                cout << "2) Usun klienta, ";
                cout << "3) Modyfikuj dane klienta, ";
                cout << "0) Wroc" << endl;
                cout << "Wybierz opcje z menu: ";
                cin >> kopcja;
                while(cin.get()!='\n') { }
                if(kopcja == 1)
                {
                    //nowy_klinet();
                }
                else if(kopcja == 2)
                {
                    //usun_klienta();
                }
                else if(kopcja == 3)
                {
                    cout << "Modyfikowanie " << endl;
                }
                else if(kopcja == 0)
                {
                    cout << "Wracamy do menu" << endl;
                    dopcja = 0;
                }
                else
                {
                    cout << "Zla opcja wyboru. Sprobuj jeszcze raz" << endl;
                }

Z góry dzięki za zainteresowanie i pomoc.

0
Złoty Lew napisał(a):

Albo brak mi kompetencji, ale nie działa twoje rozwiązanie. To o czym pisałeś w temacie w linku też się przyda ale ja tymczasowo nie poszukuje takiego rozwiązania tylko rozwiązania lub odpowiedzi na pytanie dlaczego w formie przeze mnie napisanej to nie działa. Z góry dzięki za zainteresowanie.

Pokaż kod z naniesionymi poprawkami, to wskażę gdzie masz problem.

<quote="1235811">Niestety nie jestem zalogowany muszę to zmienić. Doszedłem do tego co wystarczyło zmienić logiczne i proste choć wymagało dodatkowej zmiennej tj: ...

A wystarczyło zainicjalizować `kopcje` na początku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1