Ha ... Egyéb nyilatkozat C-ben magyarázva

A feltételes kódfolyamat az a képesség, hogy megváltoztathatja a kódrész viselkedését bizonyos feltételek alapján. Ilyen helyzetekben használhat ifutasításokat.

A ifkijelentés döntéshozó nyilatkozatként is ismert, mivel egy adott feltétel vagy kifejezés alapján hoz döntést. Az ifutasítás belsejében lévő kódblokk végrehajtásra kerül, ha a feltétel igaznak értékeli. A göndör zárójelben lévő kód azonban kihagyásra kerül, ha az állapot hamisnak ifminősül , és a kód az utasítás végrehajtása után.

Egy ifállítás szintaxisa

if (testCondition) { // statements }

Egy egyszerű példa

Nézzünk meg erre egy példát akcióban:

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

Kimenet:

Statement is True!

Ha az ifutasítás zárójelében lévő kód igaz, akkor a göndör zárójeleken belül minden végrehajtódik. Ebben az esetben trueigazra értékeli, így a kód futtatja a printffüggvényt.

if..else nyilatkozatok

Ha egy if...elseutasításban a kód zárójelében ifszereplő kód igaz, akkor a zárójelben lévő kód végrehajtásra kerül. De ha a zárójelben lévő utasítás hamis, akkor az utasítás zárójelében lévő összes kód elsevégrehajtásra kerül.

Természetesen a fenti példa nem túl hasznos ebben az esetben, mert truemindig igaznak értékeli. Itt van egy kicsit praktikusabb:

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

Kimenet:

Statement is False!

Van itt néhány fontos különbség. Először stdbool.hnem került bele. Ez rendben van, mert trueés falseezeket nem használják, mint az első példában. A C-ben, hasonlóan más programozási nyelvekhez, használhat állításokat, amelyek igaznak vagy hamisnak értékelik, ahelyett, hogy a logikai értékeket truevagy falseközvetlenül használnák.

Vegyük észre azt is az az állapot, a zárójelben a ifnyilatkozatot: n == 3. Ez a feltétel összehasonlítja nés a 3. szám ==az összehasonlító operátor, és egyike a C összehasonlítási műveleteinek.

Beágyazott if...else

A if...elsekijelentés lehetővé teszi a két lehetőség közötti választást. De néha három vagy több lehetőség közül kell választania.

Például a matematika előjelfüggvénye -1-et ad vissza, ha az argumentum kisebb, mint nulla, +1-et, ha az argumentum nagyobb, mint nulla, és nullát ad vissza, ha az argumentum nulla.

A következő kód valósítja meg ezt a függvényt:

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

Amint láthatja, egy második if...elseutasítás beágyazódik elseaz első utasításába if..else.

Ha xkisebb, mint 0, akkor sign-1 értékre állítjuk. Ha azonban xnem kevesebb, mint 0, akkor a második if...elseutasítás végrehajtásra kerül. Ha x0-val egyenlő, signakkor szintén 0-ra van állítva. De ha xnagyobb, mint 0, signakkor ehelyett 1-re van állítva.

Beágyazott if...elseállítás helyett a kezdők gyakran egy sor ifmondatot használnak:

if (x  0) { sign = 1; }

Bár ez működik, nem ajánlott, mivel nem világos, hogy a hozzárendelési utasítások közül ( sign = ...) csak az egyiket kell végrehajtani a (z ) értékétől függően x. Ez nem hatékony - a kód futtatásakor mindhárom feltétel tesztelésre kerül, még akkor is, ha egy vagy kettőnek nem kell lennie.

másképp ... ha nyilatkozatok

if...elseaz utasítások az állítások alternatívája if. Tekintsük a következő:

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

Kimenet:

n is equal to 5!

Ha az ifállítás feltétele hamisnak else...ifminősül , akkor az utasítás feltételét ellenőrizzük. Ha ez a feltétel igaznak bizonyul, akkor az else...ifutasítás göndör zárójelben lévő kódja fut.

Összehasonlító operátorok

Operátor neveHasználatEredmény
Egyenlőa == bIgaz, ha aegyenlő b, hamis egyébként
Nem egyenlőa != bIgaz, ha anem egyenlő b, hamis egyébként
Nagyobb, minta > bIgaz, ha anagyobb b, hamis egyébként
Nagyobb vagy egyenlőa >= bIgaz, ha anagyobb vagy egyenlő b, egyébként hamis
Kevesebb, minta < bIgaz, ha akevesebb mint b, hamis egyébként
Kevesebb, mint vagy egyenlőa <= bIgaz, ha akisebb vagy egyenlő b, egyébként hamis

Logikai operátorok

Érdemes futtatni egy kis kódot, ha valami nem igaz, vagy ha két dolog igaz. Ehhez rendelkezünk logikai operátorokkal:

Operátor neveHasználatEredmény
Nem ( !)!(a == 3)Igaz, ha aaz nem egyenlő 3
És ( &&)a == 3 && b == 6Igaz, ha aegyenlő 3 ésb egyenlő 6
Vagy ( ||)a == 2 || b == 4True if a is equal to 2 orb is equal to 4

For example:

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

Output:

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

An important note about C comparisons

While we mentioned earlier that each comparison is checking if something is true or false, but that's only half true. C is very light and close to the hardware it's running on. With hardware it's easy to check if something is 0 or false, but anything else is much more difficult.

Instead it's much more accurate to say that the comparisons are really checking if something is 0 / false, or if it is any other value.

For example, his if statement is true and valid:

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

By design, 0 is false, and by convention, 1 is true. In fact, here’s a look at the stdbool.h library:

#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.