Kategorie-Archiv: C++

C++ Tipps und Tricks

C++ for

Die im Rumpf der for Schleife enthaltenen Anweisungen werden solange ausgeführt, bis die Auswertung des Schleifenkopfs false ergibt. Im Kopf der “for” Schleife wird zuerst eine Laufvariable mit einen Startvalue initialisiert. Als nächstes wird eine Bedingung für den Durchlauf der Schleife erwartet. Im letzten Teil des Kopfes muss noch die Erhöhung bzw. die Verkleinerung der Laufvariablen definiert werden. Im nachfolgenden Beispiel ist “i” die Laufvariable, i<10 ist die Bedingung für den Durchlauf und “i++” steht für die Erhöhung der Laufvariablen. Beachten Sie das die Erhöhung bzw. Verkleinerung der Startvariablen in endlich vielen Schritten die Schranke der Laufbedingung durchbrechen muss, da es sich ansonsten um eine Endlosschleife handelt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
int main()
{
	int i;
 
	for(i=1; i < 10; i++)
	{
		cout << "Wert von i :" << i << endl;
	}
 
}

C++ do

Die im Rumpf der do Schleife enthaltenen Anweisungen werden solange ausgeführt, bis die Auswertung des Schleifenkopfs false ergibt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
	int i;
 
	do
	{
		cout << "Bitte 123 eingeben.";
		cin >> i;
	}while(i!=123);
 
}

Im Gegensatz zur while Schleife wird der Rumpf mindestens einmal durchlaufen, dabei wird der Wert des Schleifenkopfes noch nicht berücksichtigt.

Fallunterscheidung mit switch in C++

Das switch-Konstrukt dient der Fallunterscheinung und bedeutet übersetzt “schalten”. Eine übergebene Variable dient der switch-Anweisung dabei als Schalter. Im Anweisungsblock übernehmen Sprungmarken (case)die weitere Arbeit. Diesen Sprungmarken folgt eine Konstante sowie ein Doppelpunkt.
 
Ein kleines Beispiel:

1
2
3
4
5
6
7
8
9
10
11
switch(Variable)
{
 case 10:
 
 case 20:
 
 case 30:
 
 case 40:
 
}

 
 

Die Anzahl der case-Anweisungen ist beliebig. Hat die Variable den Wert 10 wird die entsprechende case-Anweisung und alle folgenden ausgeführt.
 

1
2
3
4
5
6
7
8
9
10
11
switch(Variable)
{
 case 10: cout << "Variable hat den Wert 10." << endl;
 
 case 20: cout << "Variable hat den Wert 20." << endl;
 
 case 30: cout << "Variable hat den Wert 30." << endl;
 
 case 40: cout << "Variable hat den Wert 40." << endl;
 
}

 

Nimmt Variable den Wert 40 an sieht die Ausgabe in Ordnung aus. Sollte der Wert der Variable aber bei 10 liegen erscheint der Text für alle case-Anweisungen.
Die Ausführung aller nachfolgenden case-Anweisungen kann nur durch die Verwendung der break-Anweisung unterbunden werden.
 

1
2
3
4
5
6
7
8
9
10
11
12
13
switch(Variable)
{
 case 10: cout << "Variable hat den Wert 10." << endl;
          break;
 
 case 20: cout << "Variable hat den Wert 20." << endl;
          break;
 
 case 30: cout << "Variable hat den Wert 30." << endl;
          break;
 
 case 40: cout << "Variable hat den Wert 40." << endl;
}

 
 
Die letzte Anweisung benötigt kein break, da der switch-Anweisungsblock sowieso endet.
 
 
Was aber, wenn keiner der Fälle zutrifft? Existiert keine zutreffende case-Anweisung, wird das Programm am Ende des switch-Anweisungsblockes fortgesetzt. Wenn dieser Fall abgefangen werden muss, benötigt man einen Fall, der dieses Problem löst. Dieser nennt sich default und wird immer dann angesprungen, wenn kein anderer Fall “zuständig” ist.
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(Variable)
{
 case 10: cout << "Variable hat den Wert 10." << endl;
          break;
 
 case 20: cout << "Variable hat den Wert 20." << endl;
          break;
 
 case 30: cout << "Variable hat den Wert 30." << endl;
          break;
 
 case 40: cout << "Variable hat den Wert 40." << endl;
          break;
 
 default: cout << "Es wurde eine falsche Zahl eingegeben." << endl;
}

 
 

Nachfolgend wurde das obige Beispiel mit if-Anweisungen nachgebaut.
 

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
32
33
34
35
36
37
38
if(Variable==10)
 cout << "Variable hat den Wert 10." << endl;
else
 if(Variable==20)
  cout << "Variable hat den Wert 20." << endl;
 else
  if(Variable==30)
   cout << "Variable hat den Wert 30." << endl;
  else
   if(Variable==40)
    cout << "Variable hat den Wert 40." << endl;
   else   
    cout << "Es wurde eine falsche Zahl eingegeben." << endl;
 
 
 
// oder so
 
 
if(Variable==10)
 cout << "Variable hat den Wert 10." << endl;
else
{
 if(Variable==20)
  cout << "Variable hat den Wert 20." << endl;
 else
 {
  if(Variable==30)
   cout << "Variable hat den Wert 30." << endl;
  else
  {
   if(Variable==40)
    cout << "Variable hat den Wert 40." << endl;
   else   
    cout << "Es wurde eine falsche Zahl eingegeben." << endl;
  }
 }
}

C++ if-Anweisung

Ein erstes Beispiel für eine if-Anweisung sieht wie folgt aus:

1
2
3
if(Bedingung)
{
}

 

Ist die Bedingung wahr, so werden alle Anweisungen innerhalb der geschweiften Klammern ausgeführt. Ist die Bedingung falsch, werden alle Anweisungen in den geschweiften Klammern übersprungen.
 
Hier noch ein kleines Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
 int zahl;
 cout << "Geben Sie eine Zahl ein:";
 cin  >> zahl;
 
 if(zahl<50)
 {
   cout << "Die Zahl ist kleiner als 50." << endl;
 }
 
 
 if(zahl>50)
 {
   cout << "Die Zahl ist groesser als 50." << endl;
 }
 
 if(zahl==50)
  cout << "Die 50 wurde eingegeben." << endl;
 
}

 

Das Programm untersucht, ob eine Zahl größer, gleich oder kleiner als 50 ist.
Im Beispiel sieht man auch, dass die letzte if-Anweisung keine geschweiften Klammern hat. Das ist immer dann erlaubt, wenn der Anweisungsblock aus nur einer Anweisung besteht.
Außerdem ist es wichtig, dass die Abfrage auf Gleichheit mit zwei Gleichheitszeichen geschrieben wird. Ein Gleichheitszeichen würde der Compiler als Zuweisungsoperator interpretieren.
 
Schritt für Schritt wird in unserem Beispiel jede if-Anweisung abgearbeitet. Ist zahl<50, wird die Meldung an der Konsole ausgegeben. Trotzdem wird noch überprüft, ob die zahl>50 und ob zahl==50 ist.
Die if-Anweisung kann für diesen Fall um eine else-Anweisung erweitert werden. Diese Anweisung wird ausgeführt, wenn die Bedingung der if-Anweisung falsch ist. Unser Beispiel können wir somit auch so darstellen:
 

1
2
3
4
5
6
7
if(zahl<50)
 cout << "Die Zahl ist kleiner als 50." << endl;
else
 if(zahl>50)
  cout << "Die Zahl ist groesser als 50." << endl;
 else
  cout << "Die 50 wurde eingegeben." << endl;

 
 
Die geschweiften Klammern wurden hier komplett weggelassen, da jeder Anweisungsblock nur aus einer Anweisung besteht. Diese Schreibweise ist zwar erlaubt, kann aber dazu führen, das der Code von einem anderen Entwickler falsch interpretiert wird. Übersichtlicher wirkt der Code, wenn der Anweisungsblock der ersten else-Anweisung in geschweifte Klammern eingefaßt wird.
 

1
2
3
4
5
6
7
8
9
if(zahl<50)
 cout << "Die Zahl ist kleiner als 50." << endl;
else
{
 if(zahl>50)
  cout << "Die Zahl ist groesser als 50." << endl;
 else
  cout << "Die 50 wurde eingegeben." << endl;
}

 
 
Hinweis
C++ kennt noch einige weitere Vergleichoperatoren als die hier vorgestellten “>”, “<” und “==”. Eine Übersicht darüber finden Sie unter Vergleichoperatoren in C++.
 

C++ while

Die im Rumpf der while Schleife enthaltenen Anweisungen werden solange ausgeführt, bis die Auswertung des Schleifenkopfs false ergibt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
	int i=5;
 
	while(i<=25)
	{
		cout << "Wert von i :" << i << endl;
		i++;
	}
 
}

C++ Vergleichsoperatoren

Folgende Vergleichsoperatoren stehen in C++ zur Verfügung:

Operator Erklärung
x==y ist wahr wenn x gleich y
x!=y ist wahr wenn x ungleich y
x<y ist wahr wenn x kleiner y
x>y ist wahr wenn x größer y
x<=y ist wahr wenn x kleiner oder gleich y
x>=y ist wahr wenn x größer oder gleich y

 

Bei Operatoren, welche aus zwei Zeichen bestehen, ist unbedingt deren Reihenfolge einzuhalten.

 

Durch Negation dieser Ausdrücke erhält man einen Satz weitere Operatoren. Diese dienen aber eher zur Vereinfachung der Schreibweise. Es gibt immer einen Operator, welcher dem Negierten entspricht.

 

Operator (negiert) Operator Erklärung
!(x==y) x!=y ist wahr wenn x ungleich y
!(x!=y) x==y ist wahr wenn x gleich y
!(x<y) x>=y ist wahr wenn x größer oder gleich y
!(x>y) x<=y ist wahr wenn x kleiner oder gleich y
!(x<=y) x>y ist wahr wenn x größer y
!(x>=y) x<y ist wahr wenn x kleiner y

C++ INI File lesen

In diesem Tipp beschreibe ich wie eine INI Datei mit C++ eingelesen werden kann.

— INI File —

1
2
3
4
5
6
7
8
[TSQL]
URL=http://www.tsql.de
Bereiche=C++ INI
Thema=INI Dateien lesen und schreiben
 
[Test]
Eintrag1=Wert1
Eintrag2=Wert2

— C++ Quellcode —

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <Windows.h>
 
 
int main()
{
	char URL[100];
	char Bereiche[100];
 
 
	DWORD destSize;
 
	destSize=100;
 
	GetPrivateProfileString("TSQL","URL","NULL",URL,destSize,"c:\\test.ini");
	GetPrivateProfileString("TSQL","Bereiche","NULL",Bereiche,destSize,"c:\\test.ini");
 
 
	return 0;
}