• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pętla while, dlaczego program sie zamyka

0 głosów
252 wizyt
pytanie zadane 18 października 2018 w C i C++ przez Tedi Użytkownik (580 p.)

Witam, 

Mam pewien problem. Aby sobie utrwalić wiedzę, którą w jakimś stopniu przyswoiłem z odcinków kursu c++, postanowiłem napisać, projekt w którym zawarte będą konstrukcje z pierwszych 7 odcinków. Mniejsza z tym co wcześniej napisałem ;). Zależy mi na tym, by program generował kod, dopóki będzie się wpisywać nieprawidłowy lub nie wybierze się opcji wyjścia. Czy mógłby mi ktoś wyjaśnić jak zastosować tutaj pętle. Chciałbym zrobić tak aby przy wpisaniu odpowiedniego kodu, program pokazywał menu. Przy wpisaniu złego kodu, program dawał 2 opcje 1. Wygeneruj kod jeszcze raz, 2. Wyjście i tu jak użytkownik wpisał kod poprawnie pokazal menu, a jeśli nie to odesłał znow do wyboru między pierwszą a drugą opcją. Mogłem to napisać dość niezrozumiale i nieudolnie, ale dopiero zaczynam, więc prosze o wyrozumiałość wink

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
using namespace std;
string login, haslo;
int kod, liczba;
char numer;
int main()
{
    cout << "Witaj!" << endl;
    cout << "Podaj login: ";
    cin >> login;
    cout << "Podaj haslo:";
    cin >> haslo;
    if ((login== "Jan")&& (haslo== "Kowalski"))
    {



            cout << "Wygenerowany zostanie unikatowy kod"<<endl;
            srand(time(NULL));
            liczba=rand()%1000;
            cout<< "Twoj kod: "<< liczba<<endl;
            cout<< "Wpisz kod:";
            cin >> kod;
            if (kod==liczba)
            {
            cout << "Zaraz pojawi sie Menu."<< endl;
            // Tu bedzie to menu
            }
            else
            {

            cout << "Niepoprawny kod!"<< endl;
            cout << "Wybierz opcje, ktora cie interesuje:"<< endl;
            cout << "1.Generuję kod"<< endl;
            cout << "2. Wychodze z programu"<< endl;
            cout << "Wybierz opcje, ktora cie interesuje: "<< endl;
                numer=getch ();
                switch (numer)
                {
                    case '1':
                    {
                    cout<< "Zaraz zostanie wygenerowany kod"<< endl;
                    srand(time(NULL));
                    liczba=rand()%1000;
                    cout<< "Twoj kod: "<< liczba<<endl;
                    cout<< "Wpisz kod:";
                    cin >> kod;
                    //Co zrobic aby program przy wpisaniu odpowiedniego kodu pokazal menu (te które będzie w pierwszym "ifie"),
                    //przy wpisaniu złego kodu znów dał te 2 opcje.

                    }
                    break;
                    case '2':
                    {
                    exit (0);
                    }
                    break;
                    default: cout<< "Nie ma takiej opcji!"<<endl;
                }


            }


    }
    else
    {
        cout << "Niepoprawne Dane"<<endl;
    }
    system ("pause");
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 18 października 2018 przez PanRik Gaduła (4,510 p.)

a myślałeś, aby napisać to troszkę inaczej?

while( kod != liczba )
{
    cout << "Niepoprawny kod"  //itd.

   switch( number )
   {
        case 1:
        cin >> kod;
        //tutaj dochodzi do sytuacji, że jeżeli wpisze dobry kod
        //to petla while sie zakonczy.

   }
}
//tutaj pokazujesz menu

Edit: Chodzi o to , czy nie chciałbyś zamienić tego drugiego if else. 

Mógłbyś jeszcze użyć konstrukcji goto ale bardzo serdecznie nie polecam.

komentarz 18 października 2018 przez Tedi Użytkownik (580 p.)
Spróbowałem zamienić tego if else na twoją metodę, w sumie wcześniej czegoś podobnego probowałem. Niestety przy wpisaniu błednego kodu, program wyświetla nieskończoną ilość razy "Niepoprawny kod".
komentarz 18 października 2018 przez PanRik Gaduła (4,510 p.)
numer=getch ();

na

cin >> number

Nie czyścił się buffor i getchar() pobierał ostatni wpisany znak :)

Podobne pytania

0 głosów
2 odpowiedzi 368 wizyt
pytanie zadane 15 marca 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
2 odpowiedzi 582 wizyt
+1 głos
2 odpowiedzi 979 wizyt
pytanie zadane 17 listopada 2017 w C i C++ przez Zorineq Nowicjusz (130 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,329 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...