Hasło c++

0

#include <iostream>
#include <string>

using namespace std;

int main()
{
int haslo;
cout << "Podaj haslo: " ;
cin >> haslo ;
if ( haslo == 211 || 222)
{
cout << "Dostep przyznany" << "\n";
}
else
{
cout << "Niepoprawne haslo. Odmowa dostepu!" << "\n";
return 0;
}
}

Program ma sprawdzać hasło, tzn zaakceptować "211 i 222". Jak kompiluje to akceptuje mi każdą możliwą kombinacje znaków czemu? Jak usuwam "LUB" i "222" wszystko gra akceptuje tylko "211"!

Proszę o pomoc

3

Na pewno poprawnie działa z takim kodem? Jak chcesz sprawdzić dwa warunki to musisz sprawdzić oba: if(a == 42 || a == 43), przy czym stringi porównuj do stringów, a nie do liczb.

2

Nieźle tutaj namieszałeś.

Tak jest ewaluowane to wyrażenie.

haslo == 211 || 222

W C++ true to cokolwiek różne od zera, zwykle 1, więc...

211 == 211 || 222
1 || 222

Pierwsza wartość jest prawdziwa, więc nawet nie idzie dalej.

1

A jeśli hasło się nie zgadza to:

999 == 211 || 222
0 || 222

Więc na koniec będzie:

222

I to i to jest różne od zera, więc true w każdym przypadku.

Powinno być haslo == 211 || haslo == 222

2

Kolejność operatorów.

if ( haslo ==  211 || 222)

Najpierw jest wykonywany operator ||, czyli sprawdzane są jego obie strony. Lewa to haslo == 211, czyli ma wartość true gdy haslo wlasnie tyle się równa. Ale prawa strona nie ma nic wspólnego ze zmienną haslo, to po prostu liczba 222, która jest zawsze true (true jest wszystko różne od 0).

Powinno być

if ( haslo ==  211 || haslo == 222)
0

Dziękuje wszystkim są to moje pierwsze programy w C++ :)

0
kq napisał(a):

Na pewno poprawnie działa z takim kodem? Jak chcesz sprawdzić dwa warunki to musisz sprawdzić oba: if(a == 42 || a == 43), przy czym stringi porównuj do stringów, a nie do liczb.

Jest to zadanie z książki z której korzystam, program ma sprawdzić dwa hasła liczbowe po przy użyciu jednego operatora if.

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