Uvod u C   Autor: Milan Miščević
 
Jezik
Istorijat
C++
Kompajler
Razvojni ciklus
Hello.c
Greške
Komentari
Varijable
Printf i scanf
Include i main
Zbir.c
Konstante
Naredbe i izrazi
Operatori I
Zadaci I nivo
Operatori II
If/else
Zadaci II nivo
For
Zadaci III nivo
While
Zadaci IV nivo
Funkcije
Zadaci V nivo
Nizovi
Zadaci VI nivo
Zadaci
Rječnik
Literatura

abc C
  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