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 if
utasításokat.
A if
kijelentés döntéshozó nyilatkozatként is ismert, mivel egy adott feltétel vagy kifejezés alapján hoz döntést. Az if
utasí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 if
minő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 if
utasí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 true
igazra értékeli, így a kód futtatja a printf
függvényt.
if..else
nyilatkozatok
Ha egy if...else
utasításban a kód zárójelében if
szereplő 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 else
végrehajtásra kerül.
Természetesen a fenti példa nem túl hasznos ebben az esetben, mert true
mindig 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.h
nem került bele. Ez rendben van, mert true
és false
ezeket 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 true
vagy false
közvetlenül használnák.
Vegyük észre azt is az az állapot, a zárójelben a if
nyilatkozatot: 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...else
kijelenté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...else
utasítás beágyazódik else
az első utasításába if..else
.
Ha x
kisebb, mint 0, akkor sign
-1 értékre állítjuk. Ha azonban x
nem kevesebb, mint 0, akkor a második if...else
utasítás végrehajtásra kerül. Ha x
0-val egyenlő, sign
akkor szintén 0-ra van állítva. De ha x
nagyobb, mint 0, sign
akkor ehelyett 1-re van állítva.
Beágyazott if...else
állítás helyett a kezdők gyakran egy sor if
mondatot 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...else
az 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...if
minősül , akkor az utasítás feltételét ellenőrizzük. Ha ez a feltétel igaznak bizonyul, akkor az else...if
utasítás göndör zárójelben lévő kódja fut.
Összehasonlító operátorok
Operátor neve | Használat | Eredmény |
---|---|---|
Egyenlő | a == b | Igaz, ha a egyenlő b , hamis egyébként |
Nem egyenlő | a != b | Igaz, ha a nem egyenlő b , hamis egyébként |
Nagyobb, mint | a > b | Igaz, ha a nagyobb b , hamis egyébként |
Nagyobb vagy egyenlő | a >= b | Igaz, ha a nagyobb vagy egyenlő b , egyébként hamis |
Kevesebb, mint | a < b | Igaz, ha a kevesebb mint b , hamis egyébként |
Kevesebb, mint vagy egyenlő | a <= b | Igaz, ha a kisebb 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 neve | Használat | Eredmény |
---|---|---|
Nem ( ! ) | !(a == 3) | Igaz, ha a az nem egyenlő 3 |
És ( && ) | a == 3 && b == 6 | Igaz, ha a egyenlő 3 ésb egyenlő 6 |
Vagy ( || ) | a == 2 || b == 4 | True 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.