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...

8.5 Assoziationen / Enumerationen

8.5 Assoziationen / Enumerationen

Enumerationen dienen assoziativen Aufzählungen. Oft kommen sie bei einer Menüführung zum Einsatz oder generell dort, wo eine Auswahl getroffen wird. Prinzipiell ist ein "enum" vom Typ "unsigned int", aber er erleichtert dem Programmierer das Leben, da man mit ihm einen übersichtlicheren Quelltext erzeugt. Was ich genau damit meine, verdeutlicht nachstehendes Beispiel.

Das Schema sieht so aus: enum <NameDesEnumTyps> {<Bezeichner>[=<Wert>][, ...]};

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
					
enum EAuswahl {eCreate=1, eDelete, eExit=8};

// ...

EAuswahl eAuswahl = eNone;

// Solange etwas gemacht werden soll
while (eAuswahl != eExit) {
	printf("1 = Erstellen\n");
	printf("2 = Loeschen\n");
	printf("8 = Programm beenden\n");
	printf("Bitte etwas auswaehlen: ");
	scanf_s("%i", &eAuswahl);

	switch (eAuswahl) {
		case eCreate: 
			printf("Etwas wurde erstellt\n\n");
			break;

		case eDelete:
			printf("Etwas wurde geloescht\n\n");
			break;

		case eExit:
			printf("Programm wird beendet\n");
			return 0;
	} // end of switch
} // end of while
					

Ausgabe:

0 = Erstellen
1 = Loeschen
2 = Programm beenden
Bitte etwas auswaehlen: 0
Etwas wurde erstellt

0 = Erstellen
1 = Loeschen
2 = Programm beenden
Bitte etwas auswaehlen: 2
Programm wird beendet
		

Wie Sie sehen können, ist die Switch-Anweisung jetzt viel besser lesbar.

Assoziationen fangen standardmäßig immer bei 0 an und jeder darauf folgende Bezeichner ist um einen Wert größer. Dies muss aber nicht sein, denn wie Sie im Beispiel gesehen haben, können den Bezeichnern zwischendurch auch andere Werte zugewiesen werden. Die darauf folgenden Bezeichner sind wieder um je einen Wert größer.

Ich empfehle immer noch die 2 Werte "Count" und "None" mit aufzunehmen. Das hat zum einen den Vorteil, dass "Count" genau die Anzahl der implementierten Möglichkeiten enthält (vorausgesetzt, man weißt zwischendurch nicht andere Werte zu). Somit kann man mit der Zahl der Auswahlmöglichkeiten Berechnungen durchführen. "None" wird meist immer dann eingesetzt, wenn es sich um einen nicht unterstützten Wert handelt. Auch hier kann man dann wieder sehr bequeme Abfragen stellen, die noch dazu gut lesbar sind. Hier mal ein kurzes vereinfachtes Beispiel.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
					
enum		EDateiTypen	{edtText, edtBild, edtVideo, edtMusik, edtCount, edtNone};
EDateiTypen	eDateityp	= edtVideo;

//...

printf("Momentan werden folgende %i Typen unterstuetzt.\n", edtCount);

// Durchlaufe alle unterstützten Dateitypen
for (int iCount = 0; iCount < edtCount; ++iCount) {
	// Je nachdem, was vorliegt
	switch ((EDateiTypen)iCount) {
		case edtText:
			printf("Textdatei\n");
			break;

		case edtBild:
			printf("Bilddatei\n");
			break;

		case edtVideo:
			printf("Videodatei\n");
			break;

		case edtMusik:
			printf("Musikdatei\n");
			break;

		default:
			printf("Der Dateityp wird nicht unterstützt!\n");
	} // end of switch
} // end of for
					

Ausgabe:

Momentan werden folgende 4 Typen unterstuetzt.
Textdatei
Bilddatei
Videodatei
Musikdatei
		

Wie Sie sehen, können Enumerationen durchaus in Schleifen verwendet werden und auch Typumwandlungen funktionieren reibungslos.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012