Hasło c++

Czarri
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • 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

Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99442494)
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:minuta
  • 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:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • 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

edytowany 4x, ostatnio: tsz
GS
  • Rejestracja:ponad 8 lat
  • Ostatnio:9 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)
enedil
ale to nie ma związku z kolejnością operatorów, bez względu na to, czy ważniejsze jest == czy ||, wynik będzie błędny.
GS
Z punktu widzenia kompilatora w zasadzie tak, są tylko 2 kolejności. Natomiast w głowie pytającego zrodziła się trzecia, mniej ścisła, interpretacja tego zapisu, w której wyrażenie 211 || 222 ma jakby podwójną wartość, i każda z tych wartości jest porównywana z haslo, co oznacza, że intuicyjnie przeprowadził sobie działania w kolejności: ==, ==, ||. Dlatego wspomniałem o kolejności operatorów, pytający nie tyle wybrał złą kolejność, co w ogóle zignorował konieczność zachowania pewnej kolejności.
Czarri
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:14
0

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

Czarri
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • 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.