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

Niedziałająca funkcja if

Object Storage Arubacloud
0 głosów
341 wizyt
pytanie zadane 20 lipca 2017 w C i C++ przez Icey Nowicjusz (120 p.)

Witam,

dopiero co zacząłem programować i mam pewną zagwozdkę. (Jestem dopiero po dwóch poradnikach Pana Mirosława, więc o programowaniu nie wiem jeszcze nic.)

#include <iostream>

using namespace std;
int wiek;
int main()
{
    cout << "ile masz lat?";
    cin >> wiek;
    if(wiek=18)
    {
        cout << "Jestes pelnoletni.";
    }
    else
    {
        cout << "Nie jestes pelnoletni.";
    }
    return 0;
}

Po naciśnięciu F9 i wpisaniu wieku innego od 18 np. 12 program odpowiada "Jestes pelnoletni". Z tego co zrozumiałem w poradnikach, projekt powinien pokazać drugą opcję, ale kiedy zmienię fragment kodu na:

if(wiek==18)

wszystko działa tak ja powinno. Czy ktoś mógłby mi powiedzieć dlaczego pierwszy przypadek nie działa po mojej myśli, a drugi już tak ? Za odp. z góry dziękuję. smiley

  Jeżeli post umieściłem w złej kategorii lub tagi są niepoprawne, proszę o informację zwrotną, poprawię

komentarz 21 lipca 2017 przez Icey Nowicjusz (120 p.)

Zrozumiałem już o co chodzi, dziękuję wszystkim komentującym za pomocne rady. smiley

Temat jest chyba wyczerpany i zamknięty.

PS Tak, wiem. Kod:

if(wiek==18)
    {
        cout << "Jestes pelnoletni." << endl;

  nie jest najlogiczniejszą rzeczą na świecie, ale to miała być tylko próba. wink

4 odpowiedzi

0 głosów
odpowiedź 20 lipca 2017 przez Fenix Nałogowiec (26,750 p.)
'=' sluzy generalnie do przypisywania wartosci. Wiec w warunku swojego if'a ustawiasz zmienna wiek na 18. Co daje Ci w warunku logicznym true.
komentarz 20 lipca 2017 przez Icey Nowicjusz (120 p.)

Przepraszam, ale czy mógłbyś wytłumaczyć to trochę bardziej łopatologicznie (chyba, że bardziej się już nie da crying) ,bo dalej nic nie zrozumiałem.

komentarz 20 lipca 2017 przez niezalogowany
Kod który napisałeś w instrukcji if dokonuje przypisania do zmiennej wiek liczby 18.

W takim przypadku warunkiem będzie zmienna wiek, której wartość jest równa 18.

Jeśli w warunku ifa wpiszesz liczbę (np. if(5) { ... } ), to warunek ten będzie zawsze prawdziwy (5 == true), więc instrukcja się wykona.
0 głosów
odpowiedź 20 lipca 2017 przez GaNdAlFf56 Początkujący (380 p.)
Siemka, myślę, że problem może być w 9 linijce kodu, otóż przypisujesz zmiennej wiek 18, czyli znak =. Myślę, że chodzi ci o znak porównania ==.
0 głosów
odpowiedź 20 lipca 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Operator = jest wykorzystywany do przypisywania zmiennym wartości.

Operator == służy do porównywania ze sobą dwóch wartości.
0 głosów
odpowiedź 21 lipca 2017 przez dokolyski Początkujący (290 p.)
Tak jak pisano już wcześniej, zapis if(wiek=18) powoduje zmianę wartości wiek na 18, ale NIE oznacza sprawdzenia czy wiek jest równy 18. To znaczy, że w tym przypadku warunek funkcji if - (wiek=18) nie zawiera żadnej formuły logicznej, a co za tym idzie - zawsze wykona się instrukcja zapisana pod ifem. A to znów oznacza, że nigdy nie dojdzie do wykonania instrukcji zapisanej w przypadku else, ponieważ if zawsze zwraca wartość true.

To, że zapis if(wiek=18) przypisuje wartość zmiennej wiek, zamiast ją porównywać z liczbą 18 można łatwo sprawdzić dodając pomiędzy nawiasami { } funkcji zapis cout<<wiek; (wtedy widać, że wartość zmiennej wiek zawsze zmienia się na 18).

Natomiast w przypadku zapisu if(wiek==18) następuje już poprawne porównanie, gdyż operator == służy właśnie do sprawdzania czy wartości po obu stronach są jednakowe. Więc jeśli wiek jest równy 18, funkcja zwraca true, a dla każdej innej wartości zwróci nam false.

Warto byś się jednak zastanowił nad logiką tego zapisu, gdyż dla każdej innej wartości zmiennej wiek niż 18, np. 20 lub 50 zwracanym przez program komunikatem będzie "Nie jestes pelnoletni.", co raczej nie jest zgodne z prawdą.

Powodzenia :-)
komentarz 21 lipca 2017 przez jpacanowski VIP (101,940 p.)

To znaczy, że w tym przypadku warunek funkcji if - (wiek=18) nie zawiera żadnej formuły logicznej

Zawiera... zmiennej wiek zostaje przypisana wartość 18, a warunek się wykonuje gdyż wartość zmiennej wiek jest > 0, a więc true. A więc zachodzi...

Ustaw sobie kompilator tak, aby zwracał uwagę gdy przez przypadek użyjesz operatora przypisania w warunku if, zamiast operatora porównania.

Albo zawsze możesz zapisać to tak, wtedy kompilator zwróci zawsze błąd...

if(18 = wiek)

a po poprawieniu na:

if(18 == wiek)

kompilator bez problemu skompiluje kod.

komentarz 21 lipca 2017 przez dokolyski Początkujący (290 p.)
Dzięki za uwagę, mam nadzieję, że mimo użycia błędnego sformułowania coś koledze rozjaśnię :-P A tak na marginesie, to z jakiej racji if(wiek=18) ma zwracać true tylko gdy wiek>0?
komentarz 21 lipca 2017 przez jpacanowski VIP (101,940 p.)
Każda wartość powyżej zera (0) jest True. Zmiennej wiek jest przypisywana wartość 18, a 18 to True, a więc warunek zostaje spełniony.
komentarz 21 lipca 2017 przez dokolyski Początkujący (290 p.)
Ok, nie wiedziałem o tym, dzięki.
1
komentarz 21 lipca 2017 przez jpacanowski VIP (101,940 p.)

Stąd, zamiast tak:

if(ilość_żyć > 0)

można zapisać też tak:

if(ilość_żyć)

bądź, zamiast:

if(isButtonPressed == true)

zapisać można:

if(isButtonPressed)

bądź tak, gdy warunek ma się spełnić gdy przycisk nie jest wciśnięty:

if(!isButtonPressed)

Podobne pytania

+1 głos
0 odpowiedzi 140 wizyt
pytanie zadane 19 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
+1 głos
4 odpowiedzi 2,329 wizyt
pytanie zadane 24 stycznia 2018 w Java przez braciak Nowicjusz (130 p.)
0 głosów
2 odpowiedzi 196 wizyt
pytanie zadane 13 sierpnia 2015 w PHP przez niezalogowany

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

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

...