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

instrukcje warunkowe...

Object Storage Arubacloud
+2 głosów
401 wizyt
pytanie zadane 7 sierpnia 2015 w C i C++ przez rafalmagician Obywatel (1,320 p.)

Czy mogę prosić o wytłumaczenie i czy to jest dobrze ?? W obu przypadkach ma wyświetlać to samo.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int v;
    int w;

    w = (v-4) ? w*3 : --w;
    printf("\n%d",w);
//-----------------------------
    v;
    w;

    if((v-4) != 0)
    {
        w*3;
    }
    else
    {
        --w;
    }
    printf("\n%d",w);

    return 0;
}

 

2 odpowiedzi

+4 głosów
odpowiedź 7 sierpnia 2015 przez kotfuterkowy Dyskutant (9,220 p.)
edycja 7 sierpnia 2015 przez kotfuterkowy

if((v-4) != 0)
    {
        w*3;
    }
    else
    {
        --w;
    }

Powiedz mi, co oznacza ta linijka?

w*3;

Jeśli chciałeś pomnożyć zmienną w*3 mogłeś użyć np. takiego zapisu:

w *= 3;

albo standardowego:

w = w * 3;

Co innego w wyrażeniu warunkowym:

w = (v-4) ? w*3 : --w;

Tutaj widać, że wartość w*3, lub --w będzie przypisana zmiennej w

komentarz 7 sierpnia 2015 przez rafalmagician Obywatel (1,320 p.)
Dzięki za wytłumaczenie :) Już rozumiem :)
komentarz 8 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Nie powinien być ==? Jakby nie patrzeć pojedynczy = był zawsze operatorem przypisania.
komentarz 8 sierpnia 2015 przez kotfuterkowy Dyskutant (9,220 p.)
edycja 8 sierpnia 2015 przez kotfuterkowy

@Criss, Chodzi Ci o tą linijkę?

w = (v-4) ? w*3 : --w;

Nie, nie powinno być tam  ==. Czytamy to tak. Od lewej:

Weź zmienną w i przypisz jej (stąd operator przypisania) w zależności od tego, czy warunek (v-4) jest jespełniony, następującą wartość:

  • w*3, jeśli warunek jest spełniony
  • --w, jeśli warunek nie jest spełniony

Czyli:

zmienna = (warunek) ? (wartość jeśli warunek jest spełniony) : (wartość jeśli warunek nie jest spełniony)

 

komentarz 8 sierpnia 2015 przez criss Mędrzec (172,590 p.)
A, dobrze, dzięki, źle to odczytywałem. Ale w takim razie: v-4 na pewno nie zwraca boolean :P
komentarz 8 sierpnia 2015 przez kotfuterkowy Dyskutant (9,220 p.)
edycja 8 sierpnia 2015 przez kotfuterkowy

Słusznie prawisz. Zwraca inta. Konkretnie dla v równego 4 wykona się działanie 4 - 4 równe 0, co zostanie zrozumiane jako false (wartość bollean), Dla każdej innej wartości v to co w nawiasie będzie różne od zera, a więc zostanie zrodumiane jako true. Dlatego, żeby już być zupełnie, czytelnym powinno się użyć zapisu:

w = ((v-4)!=0) ? w*3 : --w;

albo:

w = (v!=4) ? w*3 : --w;

Czyli, gdy v różne od 4 warunek jest spełniony, wykonuje się pierwsza instrukcja po lewej stronie dwukropka, a gdy v jest równe 4 wykonuje sie ta po prawej.

0 głosów
odpowiedź 7 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
W C i C++ chyba nie ma takiej składni, to znaczy skrócenia konstrukcji warunkowej. To pochodzi z Javy.
komentarz 7 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

To ja ci dziękuję za pokazanie fajnej ciekawostki! Łap za to plusa! yes

komentarz 8 sierpnia 2015 przez mrcnsct Nałogowiec (36,390 p.)
edycja 8 sierpnia 2015 przez mrcnsct

Uczę się C niewiele ponad dwa miesiące i w trzech kursach na które trafiłem było to poruszone. Nie wiem dlaczego Ty ucząc się C++ nigdy na to nie trafiłeś, w niektórych kursach C++ też to widziałem. Tu też o tym było https://forum.pasja-informatyki.pl/1314/jakie-znacie-sztuczki-jezykowe-w-c-c?show=1314#q1314.

komentarz 8 sierpnia 2015 przez niezalogowany
@Patrycjerz - ale czego nie wiedziałeś? O.o Że w instrukcji warunkowej można zrobić zainicjowanie zamiast porównania, czyli = zamiast ==?
komentarz 8 sierpnia 2015 przez mrcnsct Nałogowiec (36,390 p.)
Wydaje mi się, że chodziło mu o operator ?: , 9 linijka podanego kodu.
komentarz 8 sierpnia 2015 przez niezalogowany
Aha, instrukcja warunkowa.

Podobne pytania

0 głosów
1 odpowiedź 1,074 wizyt
pytanie zadane 29 października 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
2 odpowiedzi 797 wizyt
pytanie zadane 29 października 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
2 odpowiedzi 709 wizyt
pytanie zadane 17 grudnia 2015 w C i C++ przez varazand Początkujący (320 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 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!

...