Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

3.1 Das if else Statement

3.1 Das if else Statement

Die if Anweisung ist der einfachste Weg, um zu Prüfen, ob etwas zutrifft. Ist dem so, wird der Nachstehende Befehl ausgeführt. Optional kann man auch einen Else-Block definieren, der ausgeführt wird, wenn die Bedingung nicht zutrifft. Der Befehl für das Zutreffen der Bedingung muss immer vorhanden sein. Falls man mehr wie einen Befehl ausführen will, muss man entsprechende Befehle mittels geschweifter Klammern zu einem Block zusammen fassen. Jener Block stellt dann quasi ein Befehl dar. Aus Gründen der Übersichtlichkeit, benutze ich immer geschweifte Klammern, auch wenn ich nur einen Befehl ausführen will.

Strukturgramm der if Anweisung

Links im Strukturgramm sehen Sie eine if Anweisung ohne und rechts mit else Block.

Programmablaufplan einer if Anweisung

Links im Programmablaufplan (PAP) sehen Sie eine if Anweisung ohne und rechts mit else Block

Das Schema sieht so aus: if (<Bedingungen>) <Anweisung> [else <Anweisung>]

Hier mal ein ganz kleines Beispiel, welches entscheidet, ob eine Zahl größer als 5 ist oder nicht.

 1
 2
 3
 4
 5
 6
 7
 					
int iZahl = 10;

if (iZahl > 5) {
	// iZahl ist > 5.
} else {
	// iZahl ist <= 5.
} // end of if
					

Gerade für Anfänger empfiehlt es sich allerdings, die geschweiften Klammern in eine extra Zeile zu schreiben, da man so schneller erkennen kann, wo evtl. eine Klammer vergessen wurde. Dies sieht dann für obiges Beispiel wie folgt aus.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 					
int iZahl = 10;

if (iZahl > 5)
{
	// iZahl ist > 5.
}
else
{
	// iZahl ist <= 5.
} // end of if
					

Aus Gründen der Platzersparnis, werde ich im weiteren Verlauf dieses Tutorials, die platzsparende Schreibweise benutzen. Sie sollten für Sich selbst entscheiden, welche Schreibweise Sie angenehmer finden und diese dann konsequent anwenden. Wenn Sie sich aber angewöhnen, erst "if ( ) { }" zu schreiben und anschließend etwas in die Klammern packen, gehen Sie von Anfang an fehlenden Klammern aus dem Weg und Sie können getrost die gekürzte Schreibweise verwenden. Das ist wie gesagt Geschmackssache. Viel wichtiger ist allerdings, dass Sie wirklich innerhalb der geschweiften Klammern einrücken, wie Sie das an den Kommentaren sehen können.

Wenn man Bedingungen angibt, das trifft auch später auf die Schleifen zu, muss man nicht zwangsläufig zwei Variablen/Werte miteinander vergleichen. Mann muss nur dafür sorgen, dass der Ausdruck entweder wahr oder falsch ist. Man kann genauso gut eine boolesche Variable angeben bzw. eine Funktion aufrufen, welche einen solchen Wert zurück gibt oder auch nur schlicht eine Zahl (ist der Wert 0, wird dies als "false" angesehen, wobei jeder andere Wert als "true" interpretiert wird).

Nun habe ich mir auch angewöhnt, hinter die letzte geschlossene geschweifte Klammer noch den Kommentar "end of if" zu schreiben. Dies ist auf keinen Fall notwendig. Es dient mir nur dazu, zu erkennen, was genau die geschlossene Klammer beendet. Wenn ich Ihnen dann noch Schleifen zeige und dann darin noch if Anweisungen einbaue, welche wiederum Schleifen beinhalten, verliert man schnell den Überblick. Ein Kommentar kann dann sehr hilfreich sein. Nun könnten Sie noch berechtigt einwerfen, dass ich eigentlich hätte "end of else" schreiben müssen. Nun, dies kann man machen, aber der Kommentar soll weniger sagen, dass hier das Else zu Ende ist, als dass der ganze Block zu Ende ist. Wie oder ob Sie das überhaupt machen, ist auch wieder Geschmackssache. In meiner jahrelangen Erfahrung als Programmierer, hat sich allerdings dieser Stiel für mich am günstigsten heraus kristallisiert.

An dieser Stelle möchte ich Ihnen aber noch erklären, warum man überhaupt diese geschweiften Klammern setzen muss. Normalerweise kann der Compiler nicht wissen, wann eine if Anweisung zu Ende ist. Im Fall des ersten Blockes mag dies vielleicht nochg ehen, da man ja ein "else" hat, welches als klare Abtrennung fungieren könnte. Nun muss es aber zum einen keinen "else" Zweig geben und zum anderen muss man ja auch das Ende des "else" Zweiges signalisieren. Spätestens jetzt sollte klar sein, warum Sie die geschweiften Klammern setzen müssen. Aber es gibt auch Fälle, in welchen man auf sie verzichten kann. Immer dann, wenn ein Block nur aus einer Anweisung besteht, können die Klammern weggelassen werden und dann kann man wieder etwas Platz sparen, was folgender Quelltext demonstrieren soll.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
					
int	iZahl1				= 50;
int	iZahl2				= 50;
bool	bAllesOk			= true;

// Wenn iZahl1 kleiner oder größer ist als iZahl2
if ((iZahl1 < iZahl2) || (iZahl1 > iZahl2))
	if (iZahl1 < iZahl2)
	 	printf("%i < %i", iZahl1, iZahl2);
	else
		// Wenn sie erst gleich waren dürfen sie nicht auf einmal gleich sein
		if (iZahl1 == iZahl2)
			bAllesOk	= false;
		else
			printf("%i > %i", iZahl1, iZahl2);
else
	printf("Beide Zahlen sind gleich");

// Wenn ein Fehler aufgetreten ist
if (!bAllesOk)
	printf("!!! Etwas ist schief gelaufen !!!");
					

Der erfahrene C Programmierer geht sogar noch einen Schritt weiter und kürzt selbst dies noch weiter, in dem er die Anweisungen gleich hinter das "if" bzw. "else" schreibt. Dies sieht dann folgendermaßen aus.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
					
int	iZahl1				= 50;
int	iZahl2				= 50;
bool	bAllesOk			= true;

// Wenn iZahl1 kleiner oder größer ist als iZahl2
if ((iZahl1 < iZahl2) || (iZahl1 > iZahl2))
	if (iZahl1 < iZahl2)		printf("%i < %i", iZahl1, iZahl2);
	else	if (iZahl1 == iZahl2)	bAllesOk	= false;
		else			printf("%i > %i", iZahl1, iZahl2);
else					printf("Beide Zahlen sind gleich");

// Wenn ein Fehler aufgetreten ist
if (!bAllesOk)				printf("!!! Etwas ist schief gelaufen !!!");
					

Sie sehen also, dass man in C viele Sachen geschickt kürzen kann. Statt 25 Zeilen, benötige ich im ersten Schritt nur noch 20 und im zweiten Schritt sogar nur noch 13 Zeilen. Allerdings erkaufe ich mir diese Platzersparnis durch die Tatsache, dass der Quelltext weit komplizierter zu verstehen ist, weshalb ich Ihnen dringend ans Herz lege, auf solche Kürzungen so weit wie möglich zu verzichten. Erst wenn Sie die Sprache C sicher beherrschen, können Sie anfangen, auf solche Tricks zurückzugreifen und dann ist es auch extrem wichtig, auf den Stil zu achten (gerade die Einrückungen sind extrem wichtig).

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012