Newsflash
Erster Artikel
So, ich habe inzwischen dann den ersten richtigen Artikel geschrieben, in der Sektion "Programmierung" Kategorie "C++". Der Artikel vermittelt die Grundlagen zu Pointern. Ein wenig vorkenntnisse in C++ sollte man haben.
 
Home arrow Programmierung arrow C++ arrow If - Überprüfung eines Werts hinter &&
If - Überprüfung eines Werts hinter && PDF Drucken E-Mail
Geschrieben von Mitja Schmakeit   
Saturday, 20. October 2007
Es ist rein logisch, bei einem If wie
Code:
if (3 == 2 && 5 == 5);
, den Teil nach dem && nicht mehr zu überprüfen. C++ verfährt so, und prüft nur den ersten Teil. Will man dort Funktionen verwenden, die referenzierte Variablen ändern, so sollte man Aufpassen oder sich dies zunutze machen. Zeigen lässt sich das am besten an einem kompletten Beispiel:
Code:
#include <cstdlib> #include <cstdio> #include <iostream> using namespace std; bool bla (int *blainc) { *blainc = *blainc + 1; return true; } int main(int argc, char *argv[]) { int i; i = 3; cout << "i: " << i << endl; bla(&i); cout << "i: " << i << endl; if (3 == 2 && bla(&i)) { cout << "Das hier erscheint nie." << endl; } cout << "i: " << i << endl; system("PAUSE"); return 0; }
Output:
i: 3 i: 4 i: 4 Drücken Sie eine beliebige Taste . . .
Wie man sieht, wurde bei der If-Abfrage die Funktion bla(&i) NICHT ausgeführt. Darauf sollte man unbedingt achten, wenn man solche Funktionen innerhalb eines Ifs verwendet! Nützlich kann das ganze allerdings auch werden (wieder ein volles Programm):
Code:
#include <cstdlib> #include <cstdio> #include <iostream> using namespace std; bool blub (int teileins, int teildurch) { if ((teileins/teildurch) > 5) { return true; } else { return false; } } int main(int argc, char *argv[]) { int i, b; i = 20; b = 3; if (blub(i,b)) { cout << "yes" << endl; } else { cout << "no" << endl; } system("PAUSE"); return 0; }
Output:
yes Drücken Sie eine beliebige Taste . . .
Ändern wir jetzt die zuweisung von 3 zu b in
Code:
b = 0;
so ergibt das einen Laufzeitfehler, da die Funktion blub ja durch b teilt (Division durch 0). Hier kann man sich das jetzt zunutze machen, indem wir die zeile mit der IF-Abfrage wie folgt ändern:
Code:
if (b != 0 && blub(i,b)) { cout << "yes" << endl; } else { cout << "no" << endl; }
Nun ergibt das keinen Laufzeitfehler mehr, da blub(i,b) ja im Falle von b==0 nicht mehr abgefragt wird. Die Ausgabe ist schlicht:
Output:
no Drücken Sie eine beliebige Taste . . .
Letzte Aktualisierung ( Sunday, 10. February 2008 )
 
Weiter >
Invalid XHTML (Valid XHTML destroyed by some components), Valid CSS - Design by ah-68 - Copyright © 2007 - 2012 by Mitja Schmakeit - Hosted by taruner.de