16.02.4 Steueranweisungen
Steueranweisungen dienen der Veränderung des Programmablaufs abhängig von variablen Bedingungen. Dabei wird zwischen Schleifen und Verzweigungen unterschieden. Steueranweisungen für Schleifen führen, ja nach Bedingung, zu einer wiederholten Ausführung eines Anweisungsblocks. Steueranweisungen für Verzweigungen dienen der ein- oder keinmaligen Ausführung von Anweisungsblöcken abhängig von einer Bedingung.
Folgende Steueranweisungen stehen zur Verfügung:
|
If/else-Verzweigung
|
Syntax
if (Bedingung)
Anweisungsblock1
else
Anweisungsblock2
Eine if-Anweisung erlaubt die bedingte Ausführung eines Anweisungsblocks, wenn die Bedingung ungleich 0 ist. Zusätzlich kann ein else-Zweig angegeben werden.
Wenn die Bedingung 0 ergibt und ein else-Zweig existiert, wird nur der else-Zweig ausgeführt.
Eine Bedingung kann eine einzelne Variable oder eine Funktion sein, deren Rückgabewert dann auf 0 geprüft wird. Ansonsten ist eine Bedingung ein Vergleich oder eine boolsche Kombination von Vergleichen. Folgende Vergleichsoperationen stehen zur Verfügung:
|
a == b
|
Bedingung ist bei Gleichheit erfüllt.
|
|
a > b
|
Bedingung ist erfüllt, wenn a größer als b ist.
|
|
a < b
|
Bedingung ist erfüllt, wenn a kleiner als b ist.
|
|
a >= b
|
Bedingung ist erfüllt, wenn a größer oder gleich b ist.
|
|
a <= b
|
Bedingung ist erfüllt, wenn a kleiner oder gleich b ist.
|
|
a != b
|
Bedingung ist erfüllt, wenn a ungleich b ist.
|
|
!a
|
Bedingung ist erfüllt, wenn a gleich 0 ist. Ein Ausrufungszeichen steht für eine Negierung.
|
Boolsche Verknüpfungen
|
Bedingung1 && Bedingung2
|
Und-Verknüpfung. Alle mit Und verknüpften Teilbedingungen müssen erfüllt (ungleich 0) sein, damit die Gesamtbedingung auch erfüllt (ungleich 0) ist.
|
|
Bedingung1 || Bedingung2
|
Oder-Verknüpfung. Nur eine der mit Oder verknüpften Teilbedingungen muss erfüllt (ungleich 0) sein, damit die Gesamtbedingung auch erfüllt (ungleich 0) ist.
|
Beispiel:
Siehe unter "Anweisungsblöcke"
|
Switch-Verzweigung
|
Syntax
switch (Ausdruck)
{
case Wert1:
Anweisungen
break;
case Wert2:
Anweisungen
break;
default:
Anweisungen
break;
}
Eine switch-Anweisung erlaubt die bedingte Ausführung von Anweisungen abhängig vom Wert einer Variablen. Die switch-Anweisung gibt nach der Auswertung des switch-Ausdrucks die Steuerung an das entsprechende case-Label weiter. Diese Anweisung darf ein break-Statement enthalten, um zu verhindern, dass auch nachfolgende Anweisungen weiterer case-Labels ausgeführt werden. Wird kein passendes case-Label gefunden, wird die Steuerung an ein evtl. vorhandenes default-Label weitergegeben.
Ein case-Label muss ein konstanter Ausdruck mit einem eindeutigen ganzzahligen Wert innerhalb des switch-Blocks sein.
Beispiel
int i=0;
...
switch (1)
{
case 0;
set_text(obj,"Der Wert ist 0.");
break;
case 1:
set_text(obj),"Der Wert ist 1.");
break;
case 2:
set_text(obj),"Der Wert ist 2.");
default:
set_text(obj),"Der Wert ist anders.");
break;
};
|
While-Schleife
|
Syntax
while (Bedingung)
Anweisungsblock
Eine while-Schleife ermöglicht es, einen Schleifenkörper (Anweisungsblock) mehrmals zu durchlaufen, bis der Bedingungsausdruck 0 wird.
Mit einer break-Anweisung kann eine Schleife vorzeitig beendet werden.
Eine continue-Anweisung springt innerhalb des Anweisungsblocks direkt wieder zur Schleifenbedingung.
Beispiel
//entweder Dialog 100 oder Dialog 1 - einer muss kommen
GwCore dialog1 = NULL;
GwCore dialog100 = NULL;
while( !dialog && !dialog100 )
{
dialog100 = infra_find_frame("MBP371","MBP371_100");
dialog1 = infra_find_frame("MBP371","MBP371_1");
wait(0.1);
}
|
Do-while-Schleife
|
Syntax
do
Anweisungsblock
while(Bedingung)
Die Schleife wird solange ausgeführt, bis der Bedingungsausdruck den Wert 0 (falsch) hat. Im Gegensatz zur while-Schleife wird der Bedingungsausdruck nicht vor, sondern nach jeder Ausführung der Schleifenanweisungen getestet. Der Schleifenkörper (Anweisungsblock) wird daher mindestens einmal ausgeführt.
Mit einer break-Anweisung kann eine Schleife vorzeitig beendet werden.
Eine continue-Anweisung springt innerhalb des Anweisungsblocks direkt wieder zur Schleifenbedingung.
Beispiel
//entweder Dialog 100 oder Dialog 1 - einer muss kommen
GwCore dialog1 = NULL;
GwCore dialog100 = NULL;
do
{
dialog100 = infra_find_frame("MBP371","MBP371_100");
dialog1 = infra_find_frame("MBP371","MBP371_1");
wait(0.1);
}
while( !dialog1 && !dialog100 )
|
for-Schleife
|
Syntax
for(Initialisierungsanweisung;Bedingung;Inkrementierungsausdruck)
Anweisungsblock
Der Initialisierungsausdruck kann ein Ausdruck oder eine Deklaration sein, die vor der eigentlichen Schleife ausgeführt wird.
Die for-Anweisungen werden folgendermaßen abgearbeitet:
-
Der Initialisierungsausdruck enthält die Initialisierung der Schleifenzähler und wird als erstes ausgeführt.
-
Ergibt die Auswertung der Bedingung einen Wert, der ungleich 0 ist, wird die Schleifenanweisung ausgeführt.Ein leerer Ausdruck wird als wahr interpretiert. Ist der Wert 0 endet die Schleife.
-
Der Inkrementierungsausdruck erhöht üblicherweise einen oder mehrere Zähler.
Sind ein oder mehrere optionale Elemente leer, müssen entsprechende Strichpunkte gesetzt werden.
Die break-Anweisung dient zur Beendigung der Schleife. Die continue-Anweisung überträgt die Steuerung an den Inkrementausdruck.
Beispiel
for (int i=0;i<100;i++)
{
if (i==5) break;
if (i==3) continue;
set_text(obj,i);
}
