Uvjetni protok koda je sposobnost promjene načina ponašanja dijela koda na temelju određenih uvjeta. U takvim situacijama možete koristiti if
izjave.
if
Izjava je također poznat kao odlučivanja izjave, kao što čini odluku na temelju određenog stanja ili izraza. if
Izvršava se blok koda unutar izraza ako je uvjet procijenjen na true. Međutim, kôd unutar kovrčavih zagrada preskače se ako se uvjet procijeni na false, a kôd nakon if
izvršavanja izraza.
Sintaksa if
iskaza
if (testCondition) { // statements }
Jednostavan primjer
Pogledajmo primjer toga na djelu:
#include #include int main(void) { if(true) { printf("Statement is True!\n"); } return 0; }
Izlaz:
Statement is True!
Ako je kôd unutar zagrade if
izraza istinit, izvršava se sve unutar kovrčavih zagrada. U ovom slučaju, true
procjenjuje na true, pa kôd pokreće printf
funkciju.
if..else
izjave
U if...else
izrazu, ako je kôd u zagradi if
izraza istinit, izvršava se kôd unutar njegovih zagrada. Ali ako je izjava unutar zagrade netočna, else
umjesto nje se izvršava sav kôd unutar zagrada izraza.
Naravno, gornji primjer u ovom slučaju nije vrlo koristan jer true
uvijek ocjenjuje istinitim. Evo još jednog koji je malo praktičniji:
#include int main(void) { int n = 2; if(n == 3) { // comparing n with 3 printf("Statement is True!\n"); } else { // if the first condition is not true, come to this block of code printf("Statement is False!\n"); } return 0; }
Izlaz:
Statement is False!
Ovdje postoji nekoliko važnih razlika. Prvo, stdbool.h
nije uključeno. To je u redu jer se true
i false
ne koriste kao u prvom primjeru. U C-u, kao i u drugim programskim jezicima, možete koristiti izraze koji procjenjuju na true ili false, umjesto da koristite booleove vrijednosti true
ili false
izravno.
Također primijetiti stanje u zagradi u if
izjavi: n == 3
. Ovo se stanje uspoređuje n
i broj 3. ==
je operator usporedbe i jedna je od nekoliko operacija usporedbe u C.
Ugniježđena if...else
if...else
Izjava omogućuje izbor da se između dvije mogućnosti. Ali ponekad trebate birati između tri ili više mogućnosti.
Na primjer, funkcija znaka u matematici vraća -1 ako je argument manji od nule, +1 ako je argument veći od nule i vraća nulu ako je argument nula.
Sljedeći kod implementira ovu funkciju:
if (x < 0) sign = -1; else if (x == 0) sign = 0; else sign = 1;
Kao što vidite, druga je if...else
izjava ugniježđena unutar else
naredbe prve if..else
.
Ako x
je manje od 0, tada sign
je postavljeno na -1. Međutim, ako x
nije manje od 0, if...else
izvršava se druga naredba. Tamo je, ako x
je jednako 0, sign
također postavljeno na 0. Ali ako x
je veće od 0, sign
umjesto toga postavlja se na 1.
Umjesto ugniježđene if...else
izjave, početnici često koriste niz if
izjava:
if (x 0) { sign = 1; }
Iako ovo funkcionira, ne preporučuje se jer nije jasno da je samo jedan od izraza dodjele ( sign = ...
) namijenjen izvođenju, ovisno o vrijednosti x
. Također je neučinkovit - svaki put kad se kôd pokrene, testiraju se sva tri uvjeta, čak i ako jedan ili dva ne moraju biti.
inače ... ako izjave
if...else
izjave su alternativa nizu if
izjava. Uzmite u obzir sljedeće:
#include int main(void) { int n = 5; if(n == 5) { printf("n is equal to 5!\n"); } else if (n > 5) { printf("n is greater than 5!\n"); } return 0; }
Izlaz:
n is equal to 5!
Ako se uvjet za if
iskaz ocjenjuje kao netačan, else...if
provjerava se uvjet za iskaz. Ako se taj uvjet ocijeni istinitim, pokrenut će se kôd unutar else...if
kovrčavih zagrada izraza.
Operatori usporedbe
Ime operatora | Upotreba | Proizlaziti |
---|---|---|
Jednak | a == b |
Tačno ako a je jednako b , u suprotnom netočno |
Nije jednako | a != b |
Tačno ako a nije jednako sa b , lažno u suprotnom |
Veći od | a > b |
Tačno ako a je veće od b , u suprotnom netočno |
Veći od ili jednak | a >= b |
Tačno ako a je veće od ili jednako b , inače netačno |
Manje od | a < b |
Tačno ako a je manje od b , lažno u suprotnom |
Manje od ili jednako | a <= b |
Tačno ako a je manje ili jednako b , u suprotnom false |
Logički operatori
Možda bismo željeli pokrenuti malo koda ako nešto nije istina ili ako su dvije stvari istinite. Za to imamo logičke operatore:
Ime operatora | Upotreba | Proizlaziti |
---|---|---|
Ne ( ! ) |
!(a == 3) |
True ako a je ne jednaka 3 |
I ( && ) |
a == 3 && b == 6 |
Tačno ako a je jednako 3 ib jednako je 6 |
Ili ( || ) |
a == 2 || b == 4 |
Tačno ako a je jednako 2 ilib je jednako 4 |
Na primjer:
#include int main(void) { int n = 5; int m = 10; if(n > m || n == 15) { printf("Either n is greater than m, or n is equal to 15\n"); } else if( n == 5 && m == 10 ) { printf("n is equal to 5 and m is equal to 10!\n"); } else if ( !(n == 6)) { printf("It is not true that n is equal to 6!\n"); } else if (n > 5) { printf("n is greater than 5!\n"); } return 0; }
Izlaz:
n is equal to 5 and m is equal to 10!
Važna napomena o usporedbama C
Iako smo ranije spomenuli da svaka usporedba provjerava je li nešto točno ili netačno, ali to je samo napola istina. C je vrlo lagan i blizu je hardveru na kojem radi. Pomoću hardvera lako je provjeriti je li nešto 0 ili netačno, ali sve ostalo je puno teže.
Umjesto toga, puno je točnije reći da usporedbe stvarno provjeravaju je li nešto 0 / netačno ili je to neka druga vrijednost.
Na primjer, njegova je if izjava istinita i valjana:
if(12452) { printf("This is true!\n") }
Prema dizajnu, 0 je lažno, a prema dogovoru 1 je tačno. Zapravo, evo pogleda u stdbool.h
knjižnicu:
#define false 0 #define true 1
While there's a bit more to it, this is the core of how booleans work and how the library operates. These two lines instruct the compiler to replace the word false
with 0, and true
with 1.