Ablaufsteuerung

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

CodingTutorialC-Ablaufsteuerung

Bisher war das Ganze ziemlich langweilig, nachdem das Programm einfach nur von oben bis unten durchläuft und keine Entscheidungen getroffen werden, das soll sich jetzt ändern (:biggrin:)

if, else if, else

Ein Bedingungsblock ist unter C immer wie folgt aufgebaut:

if(BEDINGUNG)
  DANN-BLOCK-EINS;
else if(BEDINGUNG-ZWEI)
  DANN-BLOCK-FÜR-ZWEITE-BEDINGUNG;
...
else
  SONST-BLOCK;
  • die Kombination aus else und dem Sonst-Block ist optional
  • es können beliebig viele else if Bedingungsblöcke aufgeführt werden (auch null)
  • soll heißen, nur das if(BEDINGUNG) DANN-BLOCK muss sein
  • wenn mehr als ein Befehl im Dann-Block stehen soll, muss dieser von geschweiften Klammern umschlossen sein, zum Bleistift so:
#include<stdio.h>
int
main(void)
{
  unsigned int alter = 45;
  unsigned int zu_alt;

  if(alter > 40) {
    printf("das festgelegte Alter %d übersteigt 40 ...", alter);
    zu_alt = 1;
  }
  else
    zu_alt = 0;

  if(zu_alt)
    printf("du bist hierfür zu alt.");
  return 0;
}

Der Bedingungsblock

Der jeweilige Dann-Block wird immer dann ausgeführt, wenn der Befehl im Bedingungsblock zu nicht-null evaluiert. Deshalb funktioniert auch das if(zu_alt) oben.

Vergleichsoperatoren:

== gleich
 != ungleich
< kleiner
> größer
<= kleiner gleich
>= größer gleich
&& logisches und

switch

switch ist eigentlich nur eine Spezialform von if. Dabei wird ein bestimmter Wert gegen eine Vielzahl anderer verglichen - der jeweilig zugeordnete Code wird im Falle der Übereinstimmung ausgeführt.

int auswahl = 3;
switch(auswahl) {
case 0:
case 1:
  /* dieser Code wird ausgeführt, wenn auswahl == 0 oder 1 */
  break;

case 2:
  /* dieser Code wird ausgeführt, 
   * wenn auswahl == 2 */

case 3:
  /* dieser Code wird ausgeführt, wenn
   * wenn auswahl == 3
   * und bei auswahl == 2, beachte das
   * fehlende break;  */
  break;

default:
  /* wenn keines der vorstehenden cases zutrifft,
   * wird default ausgeführt, sofern vorhanden */
}
  • bei case können nur Konstanten zum Vergleich hergezogen werden, der vergleich gegen Wertbereiche bzw. Variablen ist nicht möglich (im Gegensatz zum Beispiel zu Visual Basic)


for

Bei for handelt es sich um ein Schleifenkonstrukt, das insbesondere zum Hoch- oder Runterzählen von Zahlen etc. verwendet werden kann.

for(INITIALIZER; CONDITION; INCREMENTOR)
  • Der Befehl INITIALIZER wird nur einmal, vor Ausführung der Schleife selbst, ausgeführt, um z. B. einer Variablen i die hochgezählt werden soll, zu initialisieren.
  • CONDITION wird jeweils vor Ausführung der Schleife evaluiert und entscheidet, ob die Schleife (nochmal) laufen soll oder eben nicht. Dabei wird (analog if) verglichen, ob der Wert null ist oder nicht.
  • INCREMENTOR wird ebenfalls bei jedem Schleifendurchlauf ausgeführt und sollte normalerweise die Variable z.B. i eins hoch- oder runterzählen ...

Beispiel

int zahl;
for(zahl = 5; zahl <= 10; zahl ++)
  printf("Die Variable hat momentan den Wert %d", zahl);
  • die printf Anweisung wird sechs Mal evaluiert werden, jeweils mit zahl 5 bis 10 (einschließlich)
  • um mehr als einen Befehl im Rahmen der Schleife auszuführen, muss mit Hilfe geschweifter Klammern (braces) ein Block geschaffen werden
  • sämtliche Argumente zu for sind optional, das heißt for(;;) ist syntaktisch zulässig
    • die CONDITION evaluiert in diesem Fall zu wahr, insofern läuft die Schleife endlos


while

while(a) ist eigentlich das selbe wie for(;a;), soll heißen, es handelt sich um eine Schleife, die so lange läuft, wie die angegebene Bedingung erfüllt ist.

Beispiel

int zahl = 10;
while(-- zahl) 
  printf("Die Zahl ist gegenwärtig %d.", zahl);
  • hier wird die Zahl runtergezählt, printf wird neun Mal ausgeführt (jeweils mit den Werten Zahl 9 bis Zahl 1)
  • warum?
    • zahl hat erst den Wert 10
    • -- zahl zieht erst eins ab, und vergleicht dann gegen null
    • printf wird ausgeführt
    • immer so weiter ...
    • zahl sei 1, eins wird abgezogen -> 0 - die Schleife wird nicht mehr ausgeführt ...

do ... while

Die do ... while Schleife ist eine weitere Sonderform der Schleifen. Die do ... while Schleife wird immer mindenstens einmal ausgeführt und erst bei Abschluss der Schleife selbst wird verglichen, ob sie ein weiteres mal ausgeführt werden soll (wenn der Wert bei while nicht zu null evaluiert) ...

int zahl = 5;
do
  printf("Die Zahl ist %d.", zahl);
while(zahl > 10); 
  • der Befehl printf wird hier nur einmal ausgeführt, nachdem do ... while genau dies erfordert
  • die Bedingung 5 > 10 ist nicht erfüllt, dadurch wird printf kein weiteres mal aufgerufen ...