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

przypisanie i sprawdzenie wartości w IF

Object Storage Arubacloud
0 głosów
1,398 wizyt
pytanie zadane 3 maja 2016 w C i C++ przez niezalogowany

Witam, chcę skrócić trochę program więc pomyślałem, że zrobię zmienną w nawiasach należących do if bo tylko w tym bloku będę tego używać i postanowiłem że to przetestuję.

Przy tym kodzie wyskakuje mi NIE

#include <iostream>

using namespace std;

int main()
{
    if(int a=3 && a==3)
    {
        cout<<"TAK";
    }
    else cout<<"NIE";
}

natomiast przy tym wyskakuje mi TAK

#include <iostream>

using namespace std;

int main()
{
    if(int a=3 && a!=3)
    {
        cout<<"TAK";
    }
    else cout<<"NIE";
}

te 2 kody różnią się tylko warunkiem i nie rozumiem co tutaj zachodzi, bardzo proszę o wytłumaczenie.

3 odpowiedzi

+1 głos
odpowiedź 3 maja 2016 przez Porcupine Nałogowiec (31,560 p.)
Z tego co wydaje mi się po sprawdzeniu jeszcze kilku innych kombinacji + wypisywaniu wartości a. Dzieje się coś takiego:

1) Deklaruje się zmienna 'a' z przypisaną jakąś losową wartością, tak jak bywa to w momencie kiedy po prostu deklarujesz     zmienną i nic do niej nie przypisujesz.

2) Następnie obliczana jest wartość logiczna wyrażenia: (3 && a == 3).
3 jest wartością różną od zera więc automatycznie rzutowana na wartość logiczną true.
Warunek a == 3 jest false, ponieważ w zmiennej 'a' w tym momencie są jakieś śmieci.

Z kolei w przypadku gdzie(a != 3) wyrażenie to zwara true. Czyli dla przypadku pierwszego mamy (true && false), a dla drugiego (true && true)

3) Na końcu do zmiennej 'a' przypisana jest wartość wyrażenia po prawej zrzutowana na int'a czyli w pierwszym                     przypadku będzie to :

          a = (true && false), czyli: a = 0

    A w drugim:

          a = (true && true), czyli: a = 1

No i w pierwszym przypadku skoro jest (true && false) redukuje się to do false, czyli warunek if nie jest spełniony, a w drugim jest.

Pozdrawiam,
komentarz 3 maja 2016 przez niezalogowany
to mam int a=3 dać w nawias??
komentarz 3 maja 2016 przez Porcupine Nałogowiec (31,560 p.)
Z tego co próbowałem to nic to nie zmienia. Całkiem możliwe, że takie konstrukcje nie są po prostu dopuszczalne, ale może ktoś będzie wiedział jak to obejść :D
komentarz 3 maja 2016 przez niezalogowany
no ok, ale przecież on najpierw tworzy tą zmienną, to trochę dziwne
0 głosów
odpowiedź 3 maja 2016 przez niezalogowany
Twój kod jest parsowany na coś takiego: http://wklej.to/PcUKD . Jeśli chcesz wiedzieć więcej poczytaj o operator precedence
komentarz 3 maja 2016 przez niezalogowany
a jak zrobię to w nawiasie przypisanie to będzie ok??
–1 głos
odpowiedź 3 maja 2016 przez CzikaCarry Szeryf (75,340 p.)
Dlaczego dajesz tam w IFie "a=3"? Znak "=" jest operatorem przypisania wartości, a kombinacja "==" jest operatorem porównania. Więc twój warunek wygląda tak : przypisujesz wartość 3 dla zmiennej a i sprawdzasz, czy zmienna a==3. Są to 2 podwarunki (tak to nazywam) połączone operatorem AND (&&), czyli 2 podwarunki muszą być spełnione, aby cały if dał wartość True. Pierwszy podwarunek jest warunkiem błędnym (tak to nazywam), bo tu nie ma operatora/operatorów porównania. Te "a=3" nie może być warunkiem, a więc cały if daje wartość false.
komentarz 3 maja 2016 przez niezalogowany
ale ja specjalnie przypisuję wartość

Podobne pytania

0 głosów
3 odpowiedzi 240 wizyt
pytanie zadane 16 października 2019 w C i C++ przez Olgierd47 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 389 wizyt
pytanie zadane 10 lutego 2020 w JavaScript przez disaster Bywalec (2,120 p.)
0 głosów
1 odpowiedź 569 wizyt
pytanie zadane 10 lutego 2020 w JavaScript przez disaster Bywalec (2,120 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...