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

Warunek if/else if/else

Object Storage Arubacloud
0 głosów
1,236 wizyt
pytanie zadane 22 sierpnia 2015 w C i C++ przez Decol Użytkownik (560 p.)

Chcę używając warunków if/else if/else stworzyć program do logowania, gdzie poprawny login to "login" a hasło to "hasło" lub "hasło2", oraz żeby w przypadku braku poprawności jednej z tych danych program o tym informował, np. wpisując niepoprawny login i poprawne hasło, pojawiał się komunikat: "Niepoprawny login". W moim kodzie natomiast wpisując zły login z poprawnym hasłem wyskakuje błędny komunikat - "Niepoprawne hasło". To samo tyczy się innych warunków. Proszę powiedzieć mi co robię źle.

#include <iostream>

using namespace std;

string login,haslo;

int main ()
{
cout << "Wprowadz login: " << endl;
cin >> login;
cout << "Wprowadz haslo: " << endl;
cin >> haslo;

if (login=="login" && haslo=="haslo"||haslo=="haslo2")
{
cout << "Poprawne dane";
}
else if (login!="login" && haslo=="haslo"||haslo=="haslo2")
{
cout << "Niepoprawny login";
}
else if (login=="login" && haslo!="haslo"||haslo!="haslo2")
{
cout << "Niepoprawne haslo";
}
else
{
cout << "Niepoprawny login i haslo";
}

return 0;
}

 

4 odpowiedzi

+2 głosów
odpowiedź 22 sierpnia 2015 przez Krawiec91 Pasjonat (19,600 p.)
wybrane 22 sierpnia 2015 przez Decol
 
Najlepsza
Operator AND (&&) ma wyższy priorytet niż OR (||). Priorytety operatorów w programowaniu mają się do siebie tak jak działania w mnożeniu. Jedno działanie wykonuje się przed innym. W Twoim wypadku w każdym z wyrażeń warunkowych, ciąg operacji jest następujący:
1. Sprawdzenie czy "login" jest równy (nie równy) zmiennej login.
2. Sprawdzenie czy "haslo" jest równe (nie równe) zmiennej haslo.
3. Wykonanie iloczynu logicznego (AND) na wartościach wyznaczonych w punktach 1 oraz 2.
4. Sprawdzenie czy "haslo2" jest równe (nie równe) zmiennej haslo.
5. Wykonanie sumy logicznej (OR) na wyznaczonych wartościach z punktów 3 oraz 4.

Rozwiązaniem Twojego problemu pewnie będzie wzięcie w  nawias wyrażeń po znaku iloczynu logicznego (&&). Wykonanie tego sprawi,że sprawdzanie warunku będzie wyglądało następująco:
1.Sprawdzenie czy "haslo" jest równe (nie równe) zmiennej haslo.
2. Sprawdzenie czy "haslo2" jest równe (nie równe) zmiennej haslo.
3. Suma logiczna (OR) na wyznaczonych wartościach z punktów 1 oraz 2.
4. Sprawdzenie czy "login" jest równy (nie równy) zmiennej login.
5. Iloczyn logiczny na wyznaczonych wartościach z punktów 4 oraz 3.

Wśród wyrażeń logicznych najwyższych priorytet ma negacja (NOT), dalej jest iloczyn logiczny (AND) oraz suma logiczna (OR). Działania w nawiasach wykonywane są jakie pierwsze, tak jak na matematyce w podstawówce.;) Tak było w podstawówce, takie same priorytety działań sobie w algebrze Boola i takie są w programowaniu.
+3 głosów
odpowiedź 22 sierpnia 2015 przez adrian17 Ekspert (344,860 p.)

Pilnuj łączenia operatorów logicznych. Prawdopodobnie wszędzie gdzie napisałeś

if (A && B || C)

Powinieneś napisać:

if(A && (B || C))
+1 głos
odpowiedź 22 sierpnia 2015 przez criss Mędrzec (172,590 p.)

Warunki od haseł wez w dodatkowy nawias. Tzn. np.: 

if(login == "login" && (haslo == "haslo" || haslo == "haslo2") )

I w ostatnim else if tak samo te hasla w nawias i zamiast || wrzuć &&. W sposob jaki masz teraz nawet jesli podane haslo to "haslo2" to i tak zostanie odrzucone bo nie jest "haslo".

0 głosów
odpowiedź 22 sierpnia 2015 przez ignacjusz Bywalec (2,390 p.)
Warunek logiczny || powinieneś wziąć w nawias

Podobne pytania

–2 głosów
1 odpowiedź 327 wizyt
pytanie zadane 6 lutego 2017 w C i C++ przez Sajmi Nowicjusz (150 p.)
+1 głos
3 odpowiedzi 893 wizyt

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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!

...