Bedingungen

Einführung

Immer wieder kommt es vor das Variablen verglichen werden müssen und das der Wert einer Variablen bestimmt, wie das weitere Programmgeschehen aussieht. Beispielweise müssen oft Variablen (vor allem die auf Benutzereingaben beruhen) auf ihre Gültigkeit hin überprüft werden. Auch um im allgemeinen auf Benutzereingaben reagieren zu können ist überprüfen von Werten unbedingt notwendig. C++ stellt für diese Zwecke eine Vielzahl von Methoden bereit.

Das Schlüsselwort if

Die wohl bekannteste Methode zur Auswertung von Variablen ist 'if'. Ihre allgemeine Darstellung sähe in etwa so aus:

if (<Ausdruck>)
{
	/* --- Anweisungen ---
	...
	*/
}

Wenn der Ausdruck wahr ist, d.h. ein Wert ungleich null annimmt dann werden die Anweisungen, welche in dem Block stehen ausgeführt, ansonsten nicht. Der Ausdruck kann alles möglich sein. Es kann eine einfache Zahl oder Variable oder aber ein Zeiger sein. Oft werden dort mindestens zwei Werte miteinander verglichen und wenn der Vergleich stimmt wird der Ausdruck positiv und die Anweisungen werden ausgeführt.

Beispiele:

//Beispiel1
if (a == b)
{
	cout << "a ist gleich b" << endl;
}
if (a > b)
{
	cout << "a ist größer als b" << endl;
}
//Beispiel2
bool b = (a == b);
if (b)
{
	cout << "a ist gleich b" << endl;
}
if (!b)
{
	cout << "a ist ungleich b" << endl;
}

//Beispiel3
int c = a - b;
if (c)
{
	cout << "a ist ungleich b" << endl;
}

Außerdem existiert noch das Schlüsselwort 'else'. Ist ein Ausdruck ungleich null, dann wird der sich anschließende Block ausgeführt. Ist der Ausdruck hingegen null und es folgt auf den Block ein weitere welcher durch das Schlüsselwort 'else' eingeleitet wird, dann wird dieser ausgeführt. Im allgemeinen sähe dies dann so aus:

if (<Ausdruck>)
{
	/* --- Anweisungen ---
	...
	*/
}
else
{
	/* --- Anweisungen ---
	...
	*/
}

Beispiel:

if (a > b)
{
	cout << "a ist größer als b" << endl;
}
else
{
	cout << "a ist kleiner als oder gleich b" << endl;
}

Im 'else'-Block werden nun zwei Fälle abgehandelt ('a < b' oder 'a == b'). Selbstverständlich lassen sich diese beiden Fälle ebenfalls noch einmal unterscheiden. Naheliegend wäre ein weiterer 'if'-'else'-Block im 'else'-Block. Übersichtlicher ginge dies aber wie folgt:

if (a > b)
{
	cout << "a ist größer als b" << endl;
}
else if (a < b)
{
	cout << "a ist kleiner als b" << endl;
}
else /*if (a == b)*/
{
	cout << "a ist gleich b" << endl;
}

Sind Anweisungen in einem Block einzeilig so werden die geschweiften Klammern im übrigen nicht benötigt. Es ließe sich also auch so schreiben:

if (a > b)
	cout << "a ist größer als b" << endl;
else if (a < b)
	cout << "a ist kleiner als b" << endl;
else /*if (a == b)*/
	cout << "a ist gleich b" << endl;

(Aus diesem Grund braucht wie oben bereits erwähnt im 'else'-Block kein weiteres 'if' stehen. Es lässt sich einfach hinter das 'else' setzen, da die durch das 'if' eingeleitete Bedingung in einer Zeile steht.)

Eine Bedingung kann auch aus einer Kombination  mehrerer Bedingungen bestehen. Angenommen ein Programm soll nur darauf reagieren, wenn der Wert einer Variablen zwischen eins und drei liegt. Dann sähe das so aus:

if ((a >= 1) && (a <= 3))
{
	cout << "a liegt zwischen 1 und 3" << endl;
}

oder

if ((a == 1) || (a == 2) || (a == 3))
{
	cout << "a liegt zwischen 1 und 3" << endl;
}

Welche Kombinationen mit welchen Operationen möglich sind ist aus den "Gattern" des vorherigen Kapitels über den Datentyp 'bool' zu entnehmen. Ist eine Bedingung erfüllt, dann entspricht das dem Wert 'true' ansonsten 'false'. 

Die switch-Anweisung

Soll eine Variable auf exakte Werte hin überprüft werden, dann ließe sich das mit einem 'if' mehreren 'else if' und evtl. noch einem 'else' erreichen, wobei nach jedem 'if' eine Anweisung der Form 'a == b' stehen würde. Ein wenig eleganter geht es mit der 'switch'-Anweisung. Angenommen der Benutzer gibt eine Zahl 'n' ein, die im Bereich zwischen eins und drei liegen soll, wobei jede Zahl eine anderen Programmablauf erzwingt, dann könnte dies so aussehen:

int n; cin >> n;

switch (n)
{
case 1:
	cout << "Sie haben eine 1 gedrückt" << endl;				//n == 1
	break;
case 2:
	cout << "Sie haben eine 2 gedrückt" << endl;				//n == 2
case 3:
	cout << "Sie haben eine Zahl zwischen 2 und 3 gedrückt" << endl;	//n == 2 || n == 3
	break;
default:
	cout << "Sie haben eine ungültige Eingabe gemacht" << endl;		//n < 1 || n > 3
	break;

}

Im Prinzip funktioniert die Anweisung so: Nach dem 'switch'-Befehl durchsucht das Programm die einzelnen 'case'-Anweisungen im Block. Findet es dabei eine 'case'-Anweisung hinter der genau der Wert steht, welchen die Variablen innerhalb der 'switch'-Anweisung trägt, dann springt das Programm zu dieser 'case'-Anweisung und führt alle Zeilen aus, bis es auf einen 'break'-Befehl stößt (also nicht unbedingt nur die Zeilen bis zur nächsten 'case'-Anweisung). Ist die Suche nach einer passenden 'case'-Anweisung erfolglos, dann springt das Programm zur 'default'-Anweisung, sofern vorhanden, und führt die folgenden Zeilen aus, bis entweder ein 'break' folgt oder aber der 'switch'-Block zu Ende ist. (Die Kommentare hinter den einzelnen Zeilen geben an bei welcher Eingabe die jeweilige Zeile ausgeführt wird.)

Für die nächsten Lektionen

Für die nächsten Lektionen sollte Ihnen nun bekannt sein, wie sich ein Programm durch 'if'- und 'switch'-Anweisungen steuern lässt. In der folgenden Lektion geht es um Schleifen, die in gewisser Weise Gemeinsamkeiten mit dem hier Dargestelltem haben.

Zurück Nach oben Weiter