> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baenninger.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Verzweigungen

## `if`

Die Syntax eines `if`-Statements sieht folgendermassen aus:

```c theme={null}
if (test expression)
{
    //code
}
```

Das `if-statement` evaluiert den Testausdruck in den Klammern `()`.

* Wenn der Testausdruck tu `true` ausgewertet wird, werden die Anweisungen innerhalb des Körpers von `if` ausgeführt.
* Wenn der Testausdruck tu `false` ausgewertet wird, werden die Anweisungen innerhalb des Körpers von `if` nicht ausgeführt.

### Beispiel

```c theme={null}
#include <stdio.h>

int main() {
    int number;

    printf("Enter an integer: ");
    scanf("%d", &number);

    if (number < 0) {
        printf("You entered %d.\n", number);
    }

    return 0;
}
```

Hier wird die Anweisung im `if`-Statement nur ausgeführt, wenn der User eine negative Zahl eingibt. Ansonsten wird das Programm weiter normal ausgeführt.

## `if...else`﻿

Das `if`-Statement hat noch einen optionalen `else` Block.

```c theme={null}
if (test expression) {
    // run code if test expression is true
}
else {
    // run code if test expression is false
}
```

Wenn der Testausdruck als `true` ausgewertet wird,

* werden Anweisungen innerhalb des Körpers von `if` ausgeführt.
* werden die Anweisungen innerhalb des Körpers von `else` nicht ausgeführt.

Wenn der Testausdruck als `false` ausgewertet wird,

* werden die Anweisungen im Körper von `else` ausgeführt
* werden Anweisungen innerhalb des Körpers von `if` nicht ausgeführt.

### Beispiel

```c theme={null}
#include <stdio.h>

int main() {
    int number;

    printf("Enter an integer: ");
    scanf("%d", &number);

    if (number % 2 == 0) {
        printf("%d is an even integer.", number);
    }
    else {
        printf("%d is an odd integer.", number);
    }

    return 0;
}
```

Wenn der User eine gerade Nummer eingibt, werden die Anweisungen im `if`-Block ausgeführt. Wenn es irgendeine andere Zahl oder sonstiges ist, werden die Anweisungen im `else`-Block ausgeführt.

## `if...else`-Ladder﻿

Die `if...else`-Ladder erlaubt es einem eine Variable oder ähnliches auf mehrere Werte zu prüfen.

```c theme={null}
if (test expression1) {
   // statement(s)
}
else if(test expression2) {
   // statement(s)
}
else if (test expression3) {
   // statement(s)
}
.
.
else {
   // statement(s)
}
```

### Beispiel

```c theme={null}
#include <stdio.h>

int main() {
    int number1, number2;

    printf("Enter two integers: ");
    scanf("%d %d", &number1, &number2);

    if (number1 == number2) {
        printf("%d = %d", number1, number2);
    }
    else if (number1 > number2) {
        printf("%d > %d", number1, number2);
    }
    else {
        printf("%d < %d", number1, number2);
    }

    return 0;
}
```

## Switch﻿

Mit der `switch`-Anweisungen können wir einen Codeblock unter mehreren Alternativen ausführen. Dasselbe ist auch mit einer `if..else ladder` möglich. Die Syntax der `switch`-Anweisung ist jedoch deutlich kompakter und einfacher zu lesen bzw. zu schreiben.

```c theme={null}
switch (expression)
{
    case constant1:
      // statements
      break;

    case constant2:
      // statements
      break;
    .
    .
    .
    default:
      // default statements
}
```

Die `expression` wird einmal ausgewertet und mit den Werten der einzelnen `case` verglichen.

* Gibt es eine Übereinstimmung, werden die entsprechenden Anweisungen nach dem übereinstimmenden Label ausgeführt. Ist der Wert des Ausdrucks beispielsweise gleich der `constant2`, werden die Anweisungen nach case `constant2:` ausgeführt, bis ein `break` auftritt.
* Wenn es keine Übereinstimmung gibt, werden die Standardanweisungen ausgeführt.

<Warning>
  - Wenn wir die `break`-Anweisung nicht verwenden, werden alle Anweisungen nach dem entsprechenden Label ebenfalls ausgeführt. - Der `default` Wert in einem `switch`-Statement ist
    optional.
</Warning>

### Beispiel

```c theme={null}
#include <stdio.h>

int main()
{
    char operation;
    double n1, n2;

    printf("Enter an operator (+, -, *, /): ");
    scanf("%c", &operation);
    printf("Enter two operands: ");
    scanf("%lf %lf", &n1, &n2);

    switch (operation)
    {
        case '+':
            printf("%.1lf + %.1lf = %.1lf", n1, n2, n1 + n2);
            break;

        case '-':
            printf("%.1lf - %.1lf = %.1lf", n1, n2, n1 - n2);
            break;

        case '*':
            printf("%.1lf * %.1lf = %.1lf", n1, n2, n1 * n2);
            break;

        case '/':
            printf("%.1lf / %.1lf = %.1lf", n1, n2, n1 / n2);
            break;

        // operator doesn't match any case constant +, -, *, /
        default:
            printf("Error! Operator is not correct");
    }

    return 0;
}
```
