Ako ... Objašnjena druga izjava u C

Uvjetni protok koda je sposobnost promjene načina ponašanja dijela koda na temelju određenih uvjeta. U takvim situacijama možete koristiti ifizjave.

ifIzjava je također poznat kao odlučivanja izjave, kao što čini odluku na temelju određenog stanja ili izraza. ifIzvrš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 ifizvršavanja izraza.

Sintaksa ifiskaza

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 ifizraza istinit, izvršava se sve unutar kovrčavih zagrada. U ovom slučaju, trueprocjenjuje na true, pa kôd pokreće printffunkciju.

if..else izjave

U if...elseizrazu, ako je kôd u zagradi ifizraza istinit, izvršava se kôd unutar njegovih zagrada. Ali ako je izjava unutar zagrade netočna, elseumjesto nje se izvršava sav kôd unutar zagrada izraza.

Naravno, gornji primjer u ovom slučaju nije vrlo koristan jer trueuvijek 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.hnije uključeno. To je u redu jer se truei falsene 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 trueili falseizravno.

Također primijetiti stanje u zagradi u ifizjavi: n == 3. Ovo se stanje uspoređuje ni broj 3. ==je operator usporedbe i jedna je od nekoliko operacija usporedbe u C.

Ugniježđena if...else

if...elseIzjava 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...elseizjava ugniježđena unutar elsenaredbe prve if..else.

Ako xje manje od 0, tada signje postavljeno na -1. Međutim, ako xnije manje od 0, if...elseizvršava se druga naredba. Tamo je, ako xje jednako 0, signtakođer postavljeno na 0. Ali ako xje veće od 0, signumjesto toga postavlja se na 1.

Umjesto ugniježđene if...elseizjave, početnici često koriste niz ifizjava:

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...elseizjave su alternativa nizu ifizjava. 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 ifiskaz ocjenjuje kao netačan, else...ifprovjerava se uvjet za iskaz. Ako se taj uvjet ocijeni istinitim, pokrenut će se kôd unutar else...ifkovrčavih zagrada izraza.

Operatori usporedbe

Ime operatora Upotreba Proizlaziti
Jednak a == b Tačno ako aje jednako b, u suprotnom netočno
Nije jednako a != b Tačno ako anije jednako sa b, lažno u suprotnom
Veći od a > b Tačno ako aje veće od b, u suprotnom netočno
Veći od ili jednak a >= b Tačno ako aje veće od ili jednako b, inače netačno
Manje od a < b Tačno ako aje manje od b, lažno u suprotnom
Manje od ili jednako a <= b Tačno ako aje 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 aje ne jednaka 3
I ( &&) a == 3 && b == 6 Tačno ako aje jednako 3 ib jednako je 6
Ili ( ||) a == 2 || b == 4 Tačno ako aje 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.hknjiž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.