Hasło c++

Czarri
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
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

GS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1265
2

Kolejność operatorów.

Kopiuj
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ć

Kopiuj
if ( haslo ==  211 || haslo == 222)
Czarri
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

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

Czarri
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.