No to to jest podstawowa matematyka. x < 0 || x > 3 czyli słównie x jest mniejsze od 0 lub większe od 3. Czyli nie należy do zbioru { 0, 1, 2, 3 } (uwzględniając, że to typ int i przechowuje liczby całkowite)
Wykonuj do momentu aż warunek w nawiasie jest spełniony, wpisujesz wybor>3 czyli pętla się wykonuje do momentu, aż zmienna wybor jest większa od 3 , jeśli wpiszesz 0,1,2,3 pętla zakończy swe działanie.
Może i masz char, ale przede wszystkim problemy z logiką.
Pętla wykonuje się, dopóki warunek w nawiasach od while jest prawdziwy. Chcesz ją przerwać, więc musisz sprawić, aby na Twoje żądanie warunek ten stał się fałszywy. Jak rozumiem - chcesz, aby działo się tak po naciśnięciu ‘0’, ‘1’, ‘2’ albo ‘3’. Więc po co wpisujesz jakieś ‘4’, ‘5’, ‘6’ i ‘7’ w tym warunku, skoro te znaki Cię nie interesują?
I kolejna sprawa - czy Ty wiesz, co się dzieje w Twoim programie, tutaj:
Sprawdzasz, czy podany znak nie jest równy sześciu innym znakom. Nic dziwnego, że pętla się nie przerywa, bo KAŻDY znak jest równy tylko samemu sobie i żadnemu innemu. A przecież Ty chcesz sprawdzić, czy podany znak nie jest równy ‘0’ i ‘1’ i ‘2’ i ‘3’. Z naciskiem na spójnik “i”, więc alternatywa, której używasz, tutaj odpada.
I jeszcze taka rada - nie siedź 3 godziny nad banalnym problemem. Idź sobie na rower, ryby poczytać książkę, co lubisz. Jak odpoczniesz, to może Cię olśni
somekind , || to inaczej or - czyli “lub”. Owszem, może czasem w języku mówionym, mówiąc “i” chodzi j o “lub” z punktu widzenia logiki matematyczne. Tutaj akurat warunek: różny od 0 i różny od 1 jest prawdziwe dla wszystkich liczb poza 0 i 1. Natomiast ze spójnikiem “lub” jest prawdziwe dla każdej liczby.
jest zawsze prawdziwy, bo fałszywy mógłby być jedynie w przypadku, gdyby każdy warunek był fałszywy.
Pobawmy się w Pana Debbugera:
wpisujemy ‘3’, sprawdzany jest warunek 3 != 0, wynik jest true, więc pętla się powtarza;
wpisujemy ‘0’, sprawdzany jest warunek 0 != 0, co daje false, więc sprawdzany jest następny 0 != 2, wynik true, więc pętla sie powtarza;
wpisujemy ‘9’, sprawdzany jest warunek 9 != 0, co daje true, więc pętla się powtarza;
i tak w każdym przypadku.
Po prostu w warunku jest alternatywa, powinna być koniunkcja. Trzeba sprawdzić, czy wybór jest różny od każdej niepożądanej liczby, aby pętle powtórzyć, autor tego nie robi. Problem banalny
Ale nie mam zamiaru rzucać tu gotowym kodem. Jak ja sie uczyłem programować, nie miałem w domu telefonu, a co dopiero mówić o forum. Sam musiałem do wszystkiego dojść, niech autor też się trochę pomęczy, będzie miał z tego większą satysfakcję i zapamięta na dłużej, skąd ten “błąd”.
Jakich pętli zagnieżdżonych? Ktoś tu wspominał o zagnieżdżaniu? Bo nie ja.
Przemyślałem to - wystarczy wpisać:
while ((wybor!='0') && (wybor!='1') && (wybor!='2') && (wybor!='3'))
i działa.
Jesteś już w tym momencie dobijający.
Dzieje się tak z uwagi na fakt, że typ char przechowuje jeden znak. Więc po wpisaniu “222” zmienna wybór ma wartość “2”, więc normalnym jest, że pętla się przerywa. Wystarczy użyć string zamiast char i cudzysłowów zamiast apostrofów.
somekind , faktycznie, to przemekKK , napisał o zagnieżdżaniu. Zapomniałem dodać informacje, że to do niego i już to poprawiłem. Z tobą zgadzam się w 100%. Ale plama. #-o