Der bedingte Codefluss ist die Fähigkeit, das Verhalten eines Codeteils unter bestimmten Bedingungen zu ändern. In solchen Situationen können Sie if
Anweisungen verwenden.
Die if
Aussage wird auch als Entscheidungserklärung bezeichnet, da sie eine Entscheidung auf der Grundlage einer bestimmten Bedingung oder eines bestimmten Ausdrucks trifft. Der Codeblock in der if
Anweisung wird ausgeführt, wenn die Bedingung als wahr ausgewertet wird. Der Code in den geschweiften Klammern wird jedoch übersprungen, wenn die Bedingung als falsch ausgewertet wird, und der Code nach if
Ausführung der Anweisung.
Syntax einer if
Anweisung
if (testCondition) { // statements }
Ein einfaches Beispiel
Schauen wir uns ein Beispiel dafür in Aktion an:
#include #include int main(void) { if(true) { printf("Statement is True!\n"); } return 0; }
Ausgabe:
Statement is True!
Wenn der Code in Klammern der if
Anweisung wahr ist, wird alles in geschweiften Klammern ausgeführt. In diesem Fall wird true
true ausgewertet, sodass der Code die printf
Funktion ausführt.
if..else
Aussagen
if...else
Wenn in einer Anweisung der Code in der Klammer der if
Anweisung wahr ist, wird der Code in den Klammern ausgeführt. Wenn die Anweisung in der Klammer jedoch falsch ist, else
wird stattdessen der gesamte Code in den Klammern der Anweisung ausgeführt.
Natürlich ist das obige Beispiel in diesem Fall nicht sehr nützlich, da es true
immer als wahr ausgewertet wird. Hier ist eine andere, die etwas praktischer ist:
#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; }
Ausgabe:
Statement is False!
Hier gibt es einige wichtige Unterschiede. Erstens stdbool.h
wurde nicht aufgenommen. Das ist okay, weil true
und false
nicht wie im ersten Beispiel verwendet werden. In C können Sie wie in anderen Programmiersprachen Anweisungen verwenden, die als wahr oder falsch ausgewertet werden, anstatt die booleschen Werte true
oder false
direkt zu verwenden.
Beachten Sie auch die Bedingung in der Klammer der if
Anweisung : n == 3
. Diese Bedingung wird verglichen n
und die Zahl 3 ==
ist der Vergleichsoperator und eine von mehreren Vergleichsoperationen in C.
Verschachtelt if...else
Die if...else
Aussage erlaubt die Wahl zwischen zwei Möglichkeiten. Aber manchmal müssen Sie zwischen drei oder mehr Möglichkeiten wählen.
Beispielsweise gibt die Vorzeichenfunktion in der Mathematik -1 zurück, wenn das Argument kleiner als Null ist, +1, wenn das Argument größer als Null ist, und gibt Null zurück, wenn das Argument Null ist.
Der folgende Code implementiert diese Funktion:
if (x < 0) sign = -1; else if (x == 0) sign = 0; else sign = 1;
Wie Sie sehen können, ist eine zweite if...else
Anweisung in der else
Anweisung der ersten verschachtelt if..else
.
Wenn x
kleiner als 0 ist, sign
wird auf -1 gesetzt. Wenn x
jedoch nicht weniger als 0 ist, wird die zweite if...else
Anweisung ausgeführt. Dort wird, wenn x
gleich 0 sign
ist, auch auf 0 gesetzt. Wenn x
es jedoch größer als 0 ist, sign
wird stattdessen auf 1 gesetzt.
Anstelle einer verschachtelten if...else
Anweisung verwenden Anfänger häufig eine Reihe von if
Anweisungen:
if (x 0) { sign = 1; }
Dies funktioniert zwar, wird jedoch nicht empfohlen, da unklar ist, dass nur eine der Zuweisungsanweisungen ( sign = ...
) abhängig vom Wert von ausgeführt werden soll x
. Es ist auch ineffizient - jedes Mal, wenn der Code ausgeführt wird, werden alle drei Bedingungen getestet, auch wenn eine oder zwei nicht sein müssen.
sonst ... wenn Aussagen
if...else
Anweisungen sind eine Alternative zu einer Reihe von if
Anweisungen. Folgendes berücksichtigen:
#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; }
Ausgabe:
n is equal to 5!
Wenn die Bedingung für die if
Anweisung als falsch ausgewertet wird, wird die Bedingung für die else...if
Anweisung überprüft. Wenn diese Bedingung als wahr ausgewertet wird, wird der Code in den else...if
geschweiften Klammern der Anweisung ausgeführt.
Vergleichsoperatoren
Name des Bedieners | Verwendung | Ergebnis |
---|---|---|
Gleich | a == b | Richtig, wenn a gleich b , sonst falsch |
Nicht gleichzusetzen mit | a != b | Richtig, wenn a nicht gleich b , sonst falsch |
Größer als | a > b | Wahr wenn a größer als b , sonst falsch |
Größer als oder gleich wie | a >= b | Richtig, wenn a größer oder gleich b , sonst falsch |
Weniger als | a < b | Richtig wenn a ist kleiner als b , sonst falsch |
Weniger als oder gleich | a <= b | Richtig, wenn a kleiner oder gleich b , sonst falsch |
Logische Operatoren
Wir möchten vielleicht, dass ein bisschen Code ausgeführt wird, wenn etwas nicht stimmt oder wenn zwei Dinge wahr sind. Dafür haben wir logische Operatoren:
Name des Bedieners | Verwendung | Ergebnis |
---|---|---|
Nicht ( ! ) | !(a == 3) | Wahr , wenn a ist nicht gleich 3 |
Und ( && ) | a == 3 && b == 6 | True, wenn a gleich 3 undb gleich 6 ist |
Oder ( || ) | 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.