if–else:
if ( expr ) { statements }
statements
werden ausgeführt
statements
werden übersprungen
statements_1
werden ausgeführt
statements_2
werden ausgeführt
statements_2
kann ein weiterer if–block sein, nur
if und else sind keywords.
... if ( a < b ) { // einfaches if, auch ohne {} a = b; // wenn nur ein Befehl folgt } // (gefaehrlich!) ... if ( a < b ) { a = b; } else { b = a; } ... if ( a < b ) { a = b; } else if ( a > b ) { b = a; } else if ( a == b ) { ... } else { // wenn alles andre fehlschlaegt .. cout << "What else could I test ?" << endl; }
expr1
wird einmal am Anfang ausgeführt
expr2
wird jedesmal ausgeführt
statements
werden ausgeführt, danach expr3
for ( int i = 0; i < MAX; i++ ) { // Standard a[i] = i*i; // Abzaehlschleife sum += i; } for ( int i = 0; i < N; i++ ) { // Verschachtelte Schleifen for ( int j = i; j < M; j++ ) { // a[i][j] = i*j; } } char *text = "Donaudampfschiffahrtsgesellschafts" "kapitaenskajuetenblumenvase"; int count = 0; for (char *p = text; *p; p++ ) { count ++; } cout << count << " Buchstaben in " << text << endl;
Neu mit C++-11: Vereinfachte Schleife über Container mit direktem Zugriff auf jedes Element (for-each Loop in anderen Sprachen), z.B.
// C++ 11 |
vector<double> vec1 = { 1., 0.7, 1.8, 2e-3 }; ..// fill vec1 ..... |
// ... then loop over it |
for( double x : vec1 ) { // iterate over each element in vec1 |
cout << x; |
}; |
for( auto x : vec1 ) { // even more simple using auto for type |
cout << x; |
}; |
// C++ 03 |
vector<double> vec1; ..// fill vec1 ..... |
// ... then loop over it |
for(int i=0; i<vec1.size(); i++) { |
cout << vec1[i]; |
}; |
statements
werden ausgeführt wenn expr2
true.
statements
werden mindestens einmal ausgeführt.
... string buffer, line; while ( cin >> line ) { // read from stdin until EOF buffer += line; // append to buffer } .... int count = 0; do { // read from stdin until EOF count ++; // zaehlen } while ( cin >> line );
statements
Blocks von
for
bzw.
while Schleifen
kann man mit
for ( ; true; ) { // Endlosschleife ... if ( ... ) continue; // Springt ans Ende der Schleife if ( ... ) break; // Springt aus der Schleife raus ... } // end of loop
In C/C++ gibt es auch noch die goto Anweisung, mit der man an beliebige Stellen im Programm springen kann. Verwendung möglichst vermeiden ( Spaghetti–Code)
Variante von
if/else ist die
switch/case
Kontrollstruktur:
char response; cin >> response; switch(response) { case 'a' : cout << "you choose 'a'" << endl; break; case 'b' : cout << "you choose 'b'" << endl; break; case 'c' : cout << "you choose 'c'" << endl; break; case 'x' : case 'q' : cout << "exiting/quitting menu" << endl; quit = true; break; default : cout << "Please use a,b,c or q!" << endl; }
break nötig um switch Block zu beenden, ansonsten werden Anweisungen nach weiteren case ausgeführt.
default: wird immer ausgeführt (soweit vorhanden und nicht vorher mit break beendet).