Kui ... Muu lause C-s selgitatud

Tingimuslik koodivoog on võime muuta koodijupi käitumist teatud tingimustel. Sellistes olukordades saate kasutada ifavaldusi.

ifAvaldus on tuntud ka otsuse tegemise avalduse, kui ta teeb otsuse põhjal antud seisundi või väljend. Avalduse sees olev koodiplokk iftäidetakse, kui seisundi väärtus on tõene. Lokkisulgude sees olev kood jäetakse vahele, kui tingimus on väär, ja kood pärast iflause täitmist.

ifAvalduse süntaks

if (testCondition) { // statements }

Lihtne näide

Vaatame selle näite tegevuses:

#include  #include  int main(void) { if(true) { printf("Statement is True!\n"); } return 0; }

Väljund:

Statement is True!

Kui ifavalduse sulgudes olev kood on tõene, käivitatakse kõik lokkisulgudes. Sel juhul truehindab tõene, nii et kood käivitab printffunktsiooni.

if..else avaldused

Kui avaldises sulgudes olev kood on tõene, käivitatakse lause if...elsesulgudes ifolev kood. Kuid kui sulgudes olev lause on vale, elsetäidetakse selle asemel kogu lause sulgudes olev kood .

Muidugi pole ülaltoodud näide antud juhul eriti kasulik, sest truehindab alati tõele. Siin on veel üks praktilisem:

#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; }

Väljund:

Statement is False!

Siin on mõned olulised erinevused. Esiteks, stdbool.hpole lisatud. See on okei, sest trueja falseei kasutata nagu esimese näite. C-s, nagu ka teistes programmeerimiskeeltes, saate kasutada tõeväärtusele või väärale hinnanguid, mitte tõeväärtuse väärtusi trueega falseotse.

Märgata ka tingimus sulgudes on ifavaldus: n == 3. See tingimus on võrreldav nja number 3. ==on võrdlusoperaator ja on üks paljudest C võrdlusoperatsioonidest.

Pesastatud if...else

if...elseAvaldus võimaldab tuleb teha valik kahe võimaluse vahel. Kuid mõnikord peate valima kolme või enama võimaluse vahel.

Näiteks tagastab märgifunktsioon matemaatikas -1, kui argument on väiksem kui null, +1, kui argument on suurem kui null, ja tagastab nulli, kui argument on null.

Selle funktsiooni juurutab järgmine kood:

if (x < 0) sign = -1; else if (x == 0) sign = 0; else sign = 1;

Nagu näete, on teine if...elselause pesastatud esimese elselause sisse if..else.

Kui xon väiksem kui 0, siis signseatakse väärtus -1. Kui aga xpole väiksem kui 0, täidetakse teine if...elselause. Seal, kui xvõrdub 0, signon ka 0 seatud. Kui aga xon suurem kui 0, signon selle asemel seatud 1.

Pesastatud if...elseväite asemel kasutavad algajad sageli iflausete rida :

if (x  0) { sign = 1; }

Kuigi see töötab, pole see soovitatav, kuna on ebaselge, et ainult üks määramislausetest ( sign = ...) on mõeldud täitmiseks sõltuvalt väärtusest x. See on ka ebaefektiivne - iga kord, kui kood töötab, testitakse kõiki kolme tingimust, isegi kui üks või kaks ei pea olema.

muidu ... kui avaldused

if...elselaused on alternatiiv iflausete stringile . Mõelge järgmisele:

#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; }

Väljund:

n is equal to 5!

Kui ifväite tingimuse väärtus on vale, else...ifkontrollitakse lause tingimust . Kui selle tingimuse väärtus on tõene, else...ifkäivitatakse avalduse lokkis sulgudes olev kood .

Võrdlusoperaatorid

Operaatori nimi Kasutamine Tulemus
Võrdne a == b Tõsi, kui aon võrdne b, vale muul juhul
Pole võrdne a != b Tõsi, kui apole võrdne b, vale muidu
Suurem kui a > b Tõsi, kui aon suurem kui b, muidu vale
Suurem või võrdne a >= b Tõene, kui aon suurem või võrdne b, vale muul juhul
Vähem kui a < b Tõsi, kui aon väiksem kui b, muidu vale
Vähem kui võrdne a <= b Tõene, kui aon väiksem või võrdne b, muidu vale

Loogilised operaatorid

Võimalik, et natuke koodi käivitatakse, kui midagi pole tõsi või kui kaks asja on tõsi. Selleks on meil loogilised operaatorid:

Operaatori nimi Kasutamine Tulemus
Ei ( !) !(a == 3) Tõsi, kui aon ole võrdne 3
Ja ( &&) a == 3 && b == 6 Tõene, kui aon võrdne 3 jab võrdne 6-ga
Või ( ||) a == 2 || b == 4 Tõene, kui aon võrdne 2 võib on võrdne 4-ga

Näiteks:

#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; }

Väljund:

n is equal to 5 and m is equal to 10!

Oluline märkus C võrdluste kohta

Kuigi me varem mainisime, et iga võrdlus kontrollib, kas midagi on tõsi või vale, kuid see on ainult pooleldi tõsi. C on väga kerge ja lähedal riistvarale, millel töötab. Riistvaraga on lihtne kontrollida, kas midagi on 0 või vale, kuid midagi muud on palju keerulisem.

Selle asemel on palju täpsem öelda, et võrdlused kontrollivad tõesti, kas miski on 0 / vale või on see mõni muu väärtus.

Näiteks kui tema väide on tõene ja kehtiv:

if(12452) { printf("This is true!\n") }

Disaini järgi on 0 väär ja kokkuleppeliselt 1 tõene. Tegelikult on siin pilk stdbool.hraamatukogule:

#define false 0 #define true 1

Kuigi seal on natuke rohkem, on see booleanide tööpõhimõte ja raamatukogu tööpõhimõte. Need kaks rida annavad kompilaatorile korralduse asendada sõna false0-ga ja true1-ga.