18. Kontrollstrukturen

In Python hatten wir die Sequenz, Iteration (for, while) und Selektion (if). In C finden sich dafür natürlich Entsprechungen.

Die Sequenz ist wieder durch Hintereinanderschreiben zu erreichen; neu sind lediglich die Semikola:

msg = "Der Zähler ist jetzt %d\n";
count = 3
printf(msg, count);

Selektion in C

Gegenüber Python wichtigster Unterschied: Die Bedingung muss immer in Klammern stehen.

if (str[0]=='a') {
  printf("%s fängt mit a an\n", str);
} else {
  printf("%s fängt nicht mit a an\n", str);
}

Allgemein:

ifClause ::= "if" "(" logicExpr ")" CmpdStmt
  ["else" CmpdStmt ]
CmpdStmt ::= statement  | "{" {statement } "}"

Vorsicht Falle

Verbundanweisungen werden in C durch Klammern und nicht durch Einrückung definiert:

if (a%2!=0)
  b = a/2+1;
  printf("a ist ungerade\n");
else
  printf("a ist gerade\n");

– im if-Zweig fehlt die Klammer. Schlimmer noch das dangling else problem:

if (a%4!=0)
  if (a%2!=0)
    printf("a ist ungerade\n");
else
  printf("a ist durch 4 teilbar\n");

Das else gehört zum zweiten if! Deshalb: Immer geschweifte Klammern setzen.


Markus Demleitner

Copyright Notice