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 ;)