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

Logika pętli while - zapętlanie menu

Object Storage Arubacloud
+2 głosów
369 wizyt
pytanie zadane 15 września 2016 w C i C++ przez Andrzej Czarny Użytkownik (720 p.)

Cześć, mam problem ze zrozumieniem działania pętli while. Mam taki kod:

int menu1, menu2;
cout << "MENU 1\n";
cout << "MENU 2\n";

while (menu1 != 1 && menu2 != 2)
{
    cout << "Wybierz menu 1: ";
    cin >> menu1;
    cout << "Wybierz menu 2: ";
    cin >> menu2;
}
cout << "\npetla zakonczona";

Zadaniem programu jest wyświetlenie dwóch pozycji menu i zakończenie pętli w momencie kiedy użytkownik wprowadzi do zmiennej menu1 - cyfrę 1 oraz do zmiennej menu2 - cyfrę 2. W przeciwnym razie pętla powinna spowodować ponowne wyświetlenie prośby o wpisanie cyfr. 

Wydawało mi się, że użycie łącznika && spowoduje, że będą musiały być spełnione obydwa warunki, a okazuje się, że tak nie jest. Dopiero jak wprowadzam do kodu łącznik lub ||, wtedy wszystko zaczyna działać. Czy ktoś może mi na chłopski rozum wytłumaczyć dlaczego && nie działa w tym przypadku?

Starałem się to ogarnąć sam - bezskutecznie. Z góry dzięki za pomoc. 

komentarz 15 września 2016 przez lesny726 Nowicjusz (180 p.)
Pętlę while należy rozumieć tak: dopóki(prawda) rób {....}. Kiedy podasz jedną zmienną (menu1 = 1 lub menu2 = 2) warunek pętli while staje się fałszem i zostaje przerwana.

Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 15 września 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 16 września 2016 przez plkpiotr
 
Najlepsza

Pętla działa dopóki warunek będzie prawdziwy...
Przed pętlą zmienne menu1 i menu2 są jedynie zadeklarowane (nie są zainicjalizowane tzn. nie mają przypisanej wartości).

Wniosek: Pętla się raczej na pewno wykona, bo w zmiennych menu1 i menu2 będą śmieci (możesz je cout'em wypisać przed pętlą), które nie będą kolejno, ani 1, ani 2. Jesteśmy w pętli i podajemy wartości. Do kiedy będzie wykonywać się pętla? Wtedy kiedy warunek w nawiasie będzie prawdziwy, a ta możliwość jest jedna:

  • menu1 != 1 i menu2 != 2   ⇒ 1 i 1     ⇒ 1    (Prawda - Pętla nadal działa)

Kiedy wyskoczymy z pętli?

  • menu1 != 1 i menu2 == 2      ⇒ 1 i 0      ⇒ 0    (Fałsz - Pętla zerwana)
  • menu1 == 1 i menu2 != 2      ⇒ 0 i 1      ⇒ 0    (Fałsz - Pętla zerwana)
  • menu1 == 1 i menu2 == 2     ⇒ 0 i 0      ⇒ 0    (Fałsz - Pętla zerwana)

Każdy z tych trzech warunków jest fałszywy - pętla zostanie zerwana :)

Jeżeli masz wątpliwości wyszukaj w sieci co to jest koniunkcja (i) (&&) oraz alternatywa (lub) (||).

PS. Program działa poprawnie, choć zaproponowałbym pętlę do... while w tym przypadku.

PS2. Polecam rozpisywać sobie poszczególne zdania na fałsz (0) i (1) bo u ciebie, żeby zdanie w pętli było prawdziwe to trzeba tak jakby dwa razy zaprzeczyć :) Utrudniłeś sobie tym, że mają być różne ;)

1
komentarz 15 września 2016 przez Andrzej Czarny Użytkownik (720 p.)
Za pierwszym razem od razu nie zrozumiałem tego co napisałeś, ale rozpisałem to sobie i teraz jest już jasne. Bardzo dziękuję za pomoc.
komentarz 15 września 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Nie ma sprawy, cieszę się, że mogłem pomóc ;)
Starałem się zawrzeć wszystkie aspekty wynikające z Twojego kodu, ale nie martw się jeśli potrzebowałeś dłuższą chwilę by to zrozumieć, nawet ja analizując krok po kroku to co napisałem to musiałbym się mocno skupić, a co dopiero jeśli pisze to ktoś obcy...
Z czasem w głowie się samo ułoży :D
Powodzenia w dalszym kodzeniu!
0 głosów
odpowiedź 15 września 2016 przez niezalogowany
Pętla w przypadku && trwa tak długo jak dwa warunki są prawdziwe (wartość true). W momencie gdy podasz pierwszą wartość 1 to warunek menu1!=1 znaczy - 1 nie jest równe 1 - to jest fałszem i pętla zostanie zakończona.

Podobne pytania

+1 głos
2 odpowiedzi 174 wizyt
pytanie zadane 21 czerwca 2019 w C i C++ przez Eryk Słowiński Początkujący (280 p.)
0 głosów
2 odpowiedzi 205 wizyt
0 głosów
6 odpowiedzi 414 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez E_ZER Początkujący (320 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...