If naredba je naredba kontrole toka aplikacije. U dosadašnjim primjerima sve
naredbe aplikacije su morale biti izvršene. If naredba se sada javlja kao nekakav
semafor, koji reguliše koje će se naredbe izvršiti. If naredba se upotrebljava
u sledećem obliku:
if (uslov)
naredba;
što znači: "Ako je uslov zadovoljen (tačan), izrvšiće se naredba (tačno).".
Primjer:
#include <stdio.h>
int x;
main()
{
printf("Unesite broj ");
scanf("%d", &x);
if (x == 5)
printf("Unjeli ste broj 5!\n");
printf("Kraj izvrsavanja.\n");
return 0;
}
Unesite broj 5
Unjeli ste broj 5!
Kraj izvrsavanja.
Unesite broj 3
Kraj izvrsavanja.
Kada smo kompjalirali i pokrenuli aplikaciju, aplikacija je zatražila da unesemo broj.
Unjeli smo broj 5, koji je pridružen x-u. Postavlja se pitanje, da li je x
jednako 5. Odgovor je tačno. Uslov je zadovoljen i izvršiće se naredba ispisa.
U drugom slučaju, odgovor je bio netačan pa se nije izvršila naredba. Sledeća
naredba ispisa ("Kraj izvrsavanja.") se izvršava u oba slučaja jer ta naredba
nije obuhvaćena if naredbom. Ukoliko želimo da se izvrši više naredbi pri
zadovoljenom uslovu, onda trebamo napraviti blok naredbi.
if (x == 5)
{
printf("Unjeli ste broj 5!\n");
printf("X je 5.\n");
}
Često se savjetuje da se i jedna naredba stavi u blok jer se time postiže veća
čitljivost koda.
if (x == 5)
{
printf("Unjeli ste broj 5!\n");
}
Da bi izbjegli if naredbu za slučaj kada uslov nije zadovoljen, koristimo else
naredbu. Ona se, poput if, može koristiti van bloka, ali se to ne preporučuje.
#include <stdio.h>
int y;
main()
{
printf("Unesite broj ");
scanf("%d", &y);
if (y >= 0)
{
printf("Broj je pozitivan ili nula.\n");
}
else
{
printf("Broj je negativan.\n");
}
return 0;
}
Unesite broj 7
Broj je pozitivan ili nula.
Unesite broj 0
Broj je pozitivan ili nula.
Unesite broj -9
Broj je negativan.
"Isprogramirajmo" primjer o putu i novcu iz prethodnog poglavlja.
#include <stdio.h>
int kreditna, gotovina;
main()
{
printf("1 za \"imam\", 0 za \"nemam\".\n");
/* Bilokoji broj, sem 1,
ima isti efekat kao i 0 */
printf("Imas li kreditnu karticu\? ");
scanf("%d", &kreditna);
printf("Imas li gotovine\? ");
scanf("%d", &gotovina);
/* Ako imam ili kreditnu ili novac,
idem na put, inace ne. */
if ((kreditna == 1) || (gotovina == 1))
{
printf("\nIdem na put!\n");
}
else
{
printf("\nNe idem na put!\n");
}
return 0;
}
1 za "imam", 0 za "nemam".
Imas li kreditnu karticu? 1
Imas li gotovine? 1
Idem na put!
1 za "imam", 0 za "nemam".
Imas li kreditnu karticu? 1
Imas li gotovine? 0
Idem na put!
1 za "imam", 0 za "nemam".
Imas li kreditnu karticu? 0
Imas li gotovine? 1
Idem na put!
1 za "imam", 0 za "nemam".
Imas li kreditnu karticu? 0
Imas li gotovine? 0
Ne idem na put!
1 za "imam", 0 za "nemam".
Imas li kreditnu karticu? 5
Imas li gotovine? 0
Ne idem na put!
If/else naredbe se mogu gnijezditi, biti jedna u drugoj, ali pod uslovom da ona
bude u else bloku.
#include <stdio.h>
int broj, ispis;
main()
{
printf("Unesite broj ");
scanf("%d", &broj);
if (broj > 0)
{
printf("Pozitivan!\n");
ispis = broj;
}
else
{
if (!broj)
{
printf("Nula!\n");
ispis = broj;
}
else
{
printf("Negativan!\n");
ispis = broj;
}
}
printf("Unjeli ste %d.\n", ispis);
return 0;
}
Unesite broj 5
Pozitivan!
Unjeli ste 5.
Unesite broj 0
Nula!
Unjeli ste 0.
Unesite broj -3
Negativan!
Unjeli ste -3.
Način na koji je napisan uslov u drugoj if naredbi je nov. Takav uslov je tačan
ako izraz između zagrada nije nula. U primjeru imamo prije izraza operator
negacije, pa je uslov tačan ako je broj između zagrada nula. Dakle,
if (!broj)
if (broj)
isto radi što i
if (broj == 0)
if (broj != 0)
Ovakav vid uslova se ne preporučuje, zbog smanjene čitljivnosti.
U prethodnom poglavlju sam napomenuo da ne brkate operator pridruživanja i
operator jednakosti. Tako je česta sledeća greška:
if (x = 0)
{
y == x;
}
Poslije uslova nikad ne dolazi tačka-zarez!
if (x = 0);
Preporuka: Ovdje možete pronaći pripremljene
zadatke za vježbanje if/else naredbe kontrole toka.
Operatori II - Zadaci II nivo
|