Warunek if i zbędny else

0

Witam

Moje pytanie jest zapewne banalne ale dość mnie to intryguje otóż napisałem funkcję która sprawdza wpisywaną komendę ot, taka prosta sprawa:

if (cmd == "asc"||cmd == "num"||cmd == "col"){}
else cout<<"Bad command\n"<<endl;

W tym wypadku wszystko działa bez problemu lecz patrząc na to od razu widać że instrukcja else jest całkowicie zbędna tak więc poprawiłem kod na taki:

if (cmd != "asc"||cmd != "num"||cmd != "col"){
cout<<"Bad command\n"<<endl; }

W tym wypadku program wyrzuca komunikat "Bad command" w każdym przypadku, cokolwiek bym nie wpisał.
Jak dla mnie kod wygląda w oby dwóch przypadkach ok i powinien działać, więc co jest z nim nie tak?

4

Zastanów się co tam się dzieje.

if (cmd != "asc"||cmd != "num"||cmd != "col"){

Załóż, że cmd jest równe "asc".

cmd != "asc" ⟶ fałsz
cmd != "num" ⟶ prawda
cmd != "col" ⟶ prawda

czyli

if(false || true || true){

Chciałeś napisać, że cmd ma być różne od wszystkich trzech, a nie od dowolnego:

if(cmd != "asc" && cmd != "num" && cmd != "col"){

Ale ogółem, lepiej zapisz sobie poprawne komendy w mapie/secie (albo jeszcze lepiej trzymaj mapę/set predykatów walidujących komendy) i sprawdzaj czy obecna do nich należy - inaczej dodanie nowej komendy będzie męczarnią.

5

Prawo de Morgana się kłania: http://pl.wikipedia.org/wiki/Prawa_De_Morgana

0

Myślałem 'innym torem', dzięki za wytłumaczenie. Teraz to rozumiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1