Selbstgemachte Array suche
-
Nicht Befehl, aber eine Funktion exit(), die einen Integer entgegen nimmt. Dies entspricht dem Fehlercode mit dem die Anwendung beendet wird, wie der Rückgabewert in main.
Fehlerausgaben macht man üblicherweise mit cerr (ungepuffert), statt mit cout.
Greetz
-
Vellas schrieb:
Nicht Befehl, aber eine Funktion exit(), die einen Integer entgegen nimmt. Dies entspricht dem Fehlercode mit dem die Anwendung beendet wird, wie der Rückgabewert in main.
Ganz schlechte Empfehlung.
exitterminiert das Programm auf der Stelle, es werden keine Destruktoren aufgerufen und gibt dadurch keine Ressourcen mehr frei.Deutlich besser ist, wenn du in der main Funktion ein return <irgendeineZahl> machst, wobei <irgendeineZahl> 0 ist, falls kein Fehler war oder ein Errorcode.
Falls du irgendwo im Programm (also in anderen Funktionen) bist, dann wirft man eine Exception. Diese kann man in
mainabfangen und einen Errorcode ausgeben oder man lässt sie durchlaufen, dann stürzt das Programm ab, aber alle Destruktoren werden aufgerufen.http://magazin.c-plusplus.net/artikel/Exception-Handling
http://magazin.c-plusplus.net/artikel/Modernes%20Exception-Handling%20Teil%201%20-%20Die%20Grundlagen
http://magazin.c-plusplus.net/artikel/Modernes%20Exception-Handling%20Teil%202%20-%20Hinter%20den%20KulissenGrüssli
-
Das ist mir klar. Ich war/bin allerdings der Meinung, dass er vielleicht vorher andere Sachen festigen sollte, bevor er wieder mit neuen Sachen (Exceptions) konfrontiert wird.
Greetz
-
Vellas schrieb:
Das ist mir klar. Ich war/bin allerdings der Meinung, dass er vielleicht vorher andere Sachen festigen sollte, bevor er wieder mit neuen Sachen (Exceptions) konfrontiert wird.
Dann benutzt er eben Returnwerte. Immer noch besser, als sich rücksichtlose Mechanismen wie
exit()anzugewöhnen. Zumal man sich - gerade als Anfänger - der Konsequenzen oft gar nicht bewusst ist. Ohne Dravere hätte er vielleicht nie erfahren, wasexit()gefährlich macht...
-
Wenn wir schon dabei sind, dann sollte man ihm an dieser Stelle auch noch von globalen Variablen abhalten. Ist auch böse und kann ebenfalls schnell mal ins Auge gehen. Und eventuell, dass system() auch nicht sehr ratsam ist (mal abgesehen davon das dafür die cstdlib eig. fehlt). Ein Pause kann man auch anders nachbilden (und wenn man die Anwendung statt mit einer beliebigen Taste mit Enter beenden muss).
Greetz
-
Finds wirklich nett wieviel Sorgen ihr euch alle um mich macht :). Wohl auch nicht ganz unbegründet.
Wobei die exit Funktion schon recht hard ist, im Grunde sollte einfach eine Fehlermeldung ausgegeben werden und das Programm nicht abstürzen bzw. einfach wieder von vorn beginnen.Anderes Thema:
Ich wollte zwischen drin eine double Zahl vergleichen:double array [1]='0'
ihr wisst schon was jetzt kommt, auch wenn an Postion 1 im array eine Null steht wird dieser Ausdruck nicht True, scheiß ungenauigkeit (wie ich eben gelernt habe).Was wäre nach euer Meinung der beste Weg ein Double Wert mit einer ganzen Zahl zu vergleichen?
Ich hab schon dran gedacht einfach eine Art Grenzwert zu machen:
double array [1]='0.0000000000000000001'
wobei hier natürlich nicht ausgeschlossen sein kann das im array an der stelle noch eine längere komazahl steht die natürlich nicht Null ist.

MFG
-
Normalerweise nimmt man dafür ein delta.
z.B hier:
http://www.cplusplus.com/reference/clibrary/cfloat/
-
drakon! Doch nicht die C Makros

http://www.cplusplus.com/reference/std/limits/numeric_limits/@blade1982,
Die 0 Darstellung von double sollte aber eigentlich ziemlich genau sein.
Könnte es sein, dass du das folgende geschrieben hast?double value = '0'; // statt double value = 0.0;'0' ist nämlich nicht 0, sondern der Buchstabe 0 und dieser hat normalerweise nicht den Wert 0.
Grüssli
-
Ja habe ich ;), somit ist es überflüssig sich gedanken um den Vergleich zu machen ?
-
blade1982 schrieb:
Ja habe ich ;), somit ist es überflüssig sich gedanken um den Vergleich zu machen ?
Wenn double wirklich genau 0 ist, dann ist es genau 0, denn 0 kann ein double genau darstellen

Im allgemeinen ist es aber immer sinnvoll sich Gedanken über die Vergleiche bei Gleitkommazahlen zu machen. Denn nach verschiedenen Rechenoperationen, wenn das Ergebnis wieder 0 ergeben sollte, muss das nicht unbedingt der Fall sein
Im allgemeinen sagt man eigentlich, dass man double und float Werte nicht auf Gleichheit prüfen sollte, sondern immer mit grösser- oder kleiner-als Vergleichen. Wenn man doch mal auf Gleichheit prüfen sollte, dann ist es eben sinnvoll das Delta hinzu zu nehmen.
Grüssli
-
Und wieder was gelernt.
Das mit dem double 0 vergleich mit 0.0 hab ich nicht Ansatzweise im Internet gefunden. Könnte aber auch an meinen Suchwort gelegen haben, naja.