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

Problem z pętlą while - jak dodać następne warunki?

Mały hosting, OGROMNE możliwości
0 głosów
1,691 wizyt
pytanie zadane 9 lipca 2015 w C i C++ przez Mkanobi Nowicjusz (200 p.)
edycja 9 lipca 2015 przez Eryk Andrzejewski

Wiem, że odpowiedź na moje pytanie jest trywaialna ale nie mam się do kogo zwrócić o pomoc

Nie wiem jak dodać 2,3 etc. warunek w pętli while. Robiłem sobie taki śmieszny program i chciałem za pomocą while zapętlić wybór rasy, ale mimo że przez pomyłke uzyskałem zajefajny efekt interaktywnego menu, chciałbym aby program kończył się w chwili kiedy rasa!=1,2,3,4, zamiast po wciśnięciu klawisza zatwierdzającego (jestem po kilku poradnikach pana zelenta nie śmiejcie się ze mnie ;v) próbowałem tak: while ((rasa!='1')||(rasa!='2')||(rasa!='3')||(rasa!='4'))

 

while (rasa!='j')
    {

 

    cout << "1 - Elf" << endl;
    cout << "2 - Krasnolud" << endl;
    cout << "3 - Czlowiek" << endl;
    cout << "4 - Troll" << endl;
    cout << "Wybierz rase (numer z klawiatury): ";

    rasa=getch();
    switch(rasa)
    {
        case '1':
        rasy=1;
        system("cls");
        cout << endl << "Imie: " << imie << endl;
        cout << "Rasa: Elf                                     klawisz J aby potwierdzic"<<endl<<endl;
        raski= "elf";
        break;

        case '2':
        rasy=2;
        system("cls");
        cout << endl << "Imie: " << imie << endl;
        cout << "Rasa: Krasnolud                               klawisz J aby potwierdzic"<< endl<<endl;
        raski= "krasnolud";
        break;

        case '3':
        rasy=3;
        system("cls");
        cout << endl << "Imie: " << imie << endl;
        cout << "Rasa: Czlowiek                                klawisz J aby potwierdzic"<< endl <<endl;
        raski= "czlowiek";
        break;

        case '4':
        rasy=4;
        system("cls");
        cout << endl;
        cout << "Imie: " << imie << endl;
        cout << "Rasa: Troll                                   klawisz J aby potwierdzic" << endl<<endl;
        raski= "troll";
        break;

        default :
        cout << endl << endl << "Nieprawidlowa litera, nacisnij ENTER a nastepnie prawidlowa cyfre";

        system("cls");
        break;

        case 'j':
        break;

 

3 odpowiedzi

0 głosów
odpowiedź 9 lipca 2015 przez niezalogowany
wybrane 9 lipca 2015 przez Mkanobi
 
Najlepsza

Hm, a może spróbuj z:

while(rasa!='1'&&rasa!='2'&&rasa!='3'&&rasa!='4')

Zamiast || dałem &&, czyli że nie może być 1, 2, 3 i 4. I jeszcze coś: rasa jest typem char? Jak tak, to chyba nie mam pytań.

Pozdrawiam też zza granicy, Chorwacji ;)

komentarz 9 lipca 2015 przez Mkanobi Nowicjusz (200 p.)
Dziękuje bardzo.

Można zauważyć że w moim zaczepistym programie rasy to int , raski to string, a rasa to char

Dla każdego coś miłego XDDD
komentarz 9 lipca 2015 przez Krawiec91 Pasjonat (19,600 p.)

Ja bym to tak rozwiązał:
 

while ((rasa=='1')||(rasa=='2')||(rasa=='3')||(rasa=='4'))

Czyli, w przypadku gdy rasa nie jest równa 1, 2, 3, badź 4 warunek zwraca wartość fałsz, następuje wyjście z pętli.

komentarz 9 lipca 2015 przez niezalogowany
Hm :| W sumie to nawet prostsze ;)
komentarz 9 lipca 2015 przez Mkanobi Nowicjusz (200 p.)
Nie rozumiem - wychodzi, że pętla wykonuje się właśnie kiedy rasa jest równa 1 czyli na odwrót niż oczekuje
komentarz 9 lipca 2015 przez niezalogowany
Czyli że chcesz żeby pętla się wykonała, kiedy to co się wpisze nie będzie 1 ani 2 ani 3 ani 4, tak? Jak tak, to zastosuj mój sposób, w końcu ci działa i pasuje ;)
komentarz 9 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
A nie prościej jeden if sprawdzający czy dana wartość jest prawidłowo przypisana która przerywa nieskończoną pętlę?

Kod podałem poniżej.
komentarz 9 lipca 2015 przez Mkanobi Nowicjusz (200 p.)
Wiem, ale zawsze staram się zrozumieć co ktoś do mnie pisze (uświadomić mu / samemu sobie że się myli) może bezcelowo :)

Przepraszam, jeśli moje pytanie było niejasne i można je było zinterpretować na 2 sposoby.
0 głosów
odpowiedź 9 lipca 2015 przez Avernis Nałogowiec (27,400 p.)
(jestem za granica, i trudno sie pisze znaki polskie) Ja tez dopiero zaczynam, wiec spytam i pewnie odpowiedz jest oczywista a ja jestem totalnym idiota, ale nei mogé rozkminic po co petla, aj bym zrobil samymi caseami.
komentarz 9 lipca 2015 przez Mkanobi Nowicjusz (200 p.)
jeśli wszytsko zrobimy bez tej pętli to jesli poślizgnie się komuś palec korzystając z tego programu np na klawisz "q" to program się wysypie, lub z default przejdzie dalej i nie zostawi informacji o wybranej rasie. I trzeba go będzie odpalić od początku, co byłoby problematyczne w jakimś rpg
komentarz 9 lipca 2015 przez Avernis Nałogowiec (27,400 p.)

ok, to ja nie pomogę, ledwo co ogarniam pętle for angry

0 głosów
odpowiedź 9 lipca 2015 przez Dorion300 Szeryf (90,250 p.)

Może takie coś?

Tylko jeden if sprawdzający i while true.

 

    int rasa,rasy=0,imie;
    string raski;
    while (true)
    {



        cout << "1 - Elf" << endl;
        cout << "2 - Krasnolud" << endl;
        cout << "3 - Czlowiek" << endl;
        cout << "4 - Troll" << endl;
        cout << "Wybierz rase (numer z klawiatury): ";

        rasa=getch();
        switch(rasa)
        {
        case '1':
            rasy=1;
            system("cls");
            cout << endl << "Imie: " << imie << endl;
            cout << "Rasa: Elf                                     klawisz J aby potwierdzic"<<endl<<endl;
            raski= "elf";
            break;

        case '2':
            rasy=2;
            system("cls");
            cout << endl << "Imie: " << imie << endl;
            cout << "Rasa: Krasnolud                               klawisz J aby potwierdzic"<< endl<<endl;
            raski= "krasnolud";
            break;

        case '3':
            rasy=3;
            system("cls");
            cout << endl << "Imie: " << imie << endl;
            cout << "Rasa: Czlowiek                                klawisz J aby potwierdzic"<< endl <<endl;
            raski= "czlowiek";
            break;

        case '4':
            rasy=4;
            system("cls");
            cout << endl;
            cout << "Imie: " << imie << endl;
            cout << "Rasa: Troll                                   klawisz J aby potwierdzic" << endl<<endl;
            raski= "troll";
            break;

        default :
            cout << endl << endl << "Nieprawidlowa litera, nacisnij ENTER a nastepnie prawidlowa cyfre";

            system("cls");
            break;

        case 'j':
            break;
        }
        if(rasy>=1 && rasy <= 4) break;
    }

 

komentarz 9 lipca 2015 przez Mkanobi Nowicjusz (200 p.)
Tak wiem tobie też dziękuje :) - nie wiedziałem nawet, że tak się da.

Podobne pytania

0 głosów
2 odpowiedzi 498 wizyt
pytanie zadane 4 listopada 2016 w C i C++ przez vega Użytkownik (510 p.)
0 głosów
0 odpowiedzi 757 wizyt
pytanie zadane 9 lutego 2022 w C i C++ przez CheF123 Początkujący (450 p.)

93,715 zapytań

142,629 odpowiedzi

323,260 komentarzy

63,257 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.

...