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

problem z warunkami w funkcji "if"

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
128 wizyt
pytanie zadane 12 stycznia 2016 w C i C++ przez metono Nowicjusz (170 p.)
edycja 12 stycznia 2016

Problem polega na tym że kiedy wpisuje poprawnie login a źle hasło funkcja uznaje że została wykonana poprawnie mimo że nie został spełniony warunek 3 "&&(haslo=="lampart")" chociaż przy większej ilości zmiennych program powinien analizować od lewej do prawej i w tym przypadku powinien zanegować funkcje. Co robię źle?

#include <iostream>

using namespace std;

string login,haslo;

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

    if ((login=="ogien")||(login=="Ogien")&&(haslo=="lampart"))
    {
        cout<<"Zgadza sie :)";
    }
    else
    {
        cout<<"Nie zgadza sie probuj dalej :)";
    }

    return 0;
}

4 odpowiedzi

+2 głosów
odpowiedź 12 stycznia 2016 przez MetGang Nałogowiec (34,380 p.)
http://en.cppreference.com/w/cpp/language/operator_precedence

&& jest ponad || w kolejności działania. Kompilator powinien wywalać ostrzeżenie o tym. Warunki z || daj we wspólnym nawiasie.
+2 głosów
odpowiedź 12 stycznia 2016 przez niezalogowany

Musiałbyś pokombinować troszkę z nawiasami:

if ((login=="ogien"||login=="Ogien")&&haslo=="lampart")
{
    cout<<"Zgadza sie :)";
}

Najpierw jest nawias if()-a. Potem daję do nawiasu warunek ||, czyli albo "ogien", albo "Ogien". Jeśli ten warunek będzie spełniony, to wtedy pójdzie do następnego warunku, &&, czyli haslo=="lampart".

A najlepiej to zrobić to tak:

if ((tolower(login)=="ogien"&&haslo=="lampart")
{
    cout<<"Zgadza sie :)";
}

Funkcja tolower() (znajdująca się w bibliotece cctype, więc musisz ją zainkludować) zwraca łańcuch znaków, tylko że wszystkie litery zostają zamienione na małe. I po problemie :)

+2 głosów
odpowiedź 12 stycznia 2016 przez KubenQPL Maniak (62,860 p.)
if(((login==ogien)||(login=="Ogien))&&(haslo=="lampart"))
+1 głos
odpowiedź 12 stycznia 2016 przez piotrsz109 Stary wyjadacz (13,730 p.)
Napisz w 2 if'ach najpierw login a w środku hasło a z kodu wynika, że kiedy login jest równy Ogień sprawdza czy hasło jest poprawne

Podobne pytania

0 głosów
1 odpowiedź 656 wizyt
pytanie zadane 31 maja 2015 w Inne języki przez ziemjok Gaduła (4,160 p.)
0 głosów
0 odpowiedzi 384 wizyt
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 5 października 2019 w JavaScript przez TomekN Początkujący (330 p.)

90,852 zapytań

139,522 odpowiedzi

313,708 komentarzy

60,336 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...