bitte löschen
-
adziu24 schrieb:
1.Fall
Double Zahl eingeben: 3.33333
Ganzzahl eingeben: 1000000
Kontrollzahl vorher: 1000000
Erfasste double Zahl: 3.333330
Kontrollzahl nachher: 10000002.Fall
Double Zahl eingeben: 3.33333
Ganzzahl eingeben: 1000000
Kontrollzahl vorher: 1000000
Erfasste double Zahl: 3.333330
Kontrollzahl nachher: 1000000kann den unterschied nicht erkennen - alles korrekt
Ok, du hast anscheinen irgendeinen Kindergartencompiler der alles massiv mit Watte ausstopft, damit es ja nie weh tut, wenn man was falsch macht und man auch bloß nicht merkt, dass man einen Fehler hat
-
DirkB schrieb:
Was hat das jetzt mit dem ersten Post zu tun?
und die Fälle mit dem Code?Hab ich schlecht formuliert, ich wollte das auf den Post von adziu24 von 19:46:34 beziehen. Wird editiert.
-
bitte löschen
-
adziu24 schrieb:
was soll mir dann noch passieren
Das sind nur die üblichen gcc-Parameter. Keine Watte in Sicht. Aber ich verspreche dir, dass du einen segfault bekommst, wenn du nur weit genug über das Ende des Arrays hinausschreibst.
-
mngbd schrieb:
Hab ich schlecht formuliert, ich wollte das auf den Post von adziu24 von 19:46:34 beziehen. Wird editiert.
Ich auch. In 1:10 min krieg ich so ein Post mit Spamabfrage nicht beantwortet
Mir ist der Post von SeppJ durch die Lappen gegangen.
Nur ist in adziu24 Code ein char array_zahl[9]; aufgetaucht, das im Beispiel von SeppJ noch nicht da war. Und darum dreht sich ja die ganze Diskussion.
-
bitte löschen
-
DirkB schrieb:
Ich auch. In 1:10 min krieg ich so ein Post mit Spamabfrage nicht beantwortet
-
Toll, dass du dies nicht machen wirst, aber spätestens, wenn jemand anderes dieses Programm verwendet, WIRD dieser 100% einen Segfault verursachen. Das ist so sicher wie das Amen in der Kirche.
Dein Job als Programmierer ist es dieses zu vermeiden.
-
bitte löschen
-
adziu24 schrieb:
begrenzung halt fuer int z.b. 2147483647
segfault bekommt man dann.., wenn man den wertebereich des übergebenen datentyps
überschreitet - warum sagt mir das keiner?Nein, das ergibt einen Überlauf.
int i = 2147483647; i++;
gibt keinen segfault. i ist dann -2147483648. (bei 32-Bit int)
segfault kommt dann, wenn man Speicherbereiche schreiben/lesen will, für die das Programm keine Rechte hat.
-
bitte löschen
-
adziu24 schrieb:
Ein Menge Code
bin noch C neuling... probier nur bissel rum ^^
Ja, mach mal.
-
adziu24 schrieb:
bin noch C neuling...
Dank Deiner ausgeprägten Beratungsresistenz wird sich daran auch nichts ändern.
-
bitte löschen
-
adziu24 schrieb:
sry, aber von was redest du da? das von vorhin war sarkasmus, wie ich erwähnt habe
und was soll an meinem rumspielcode jetzt noch falsch sein?Immer noch dasselbe:
char eine_zahl[1]; ... sprintf(eine_zahl, "%lf", zahl); ... sprintf(eine_zahl, "%d", zahl);
Viel Erfolg weiterhin.
-
Ganz ehrlich! Ich finde deinen Code schrecklich kompliziert und damit nimmst du mir die Lust nachzuprüfen, ob er wirklich richtig arbeitet. An deiner Stelle würde ich den ganzen redundanten Eingabe-Code in eine eigene Funktion packen. Das Argument, dass ein Funktionsaufruf kostet, das zählt bei einer Eingabe definitiv nicht. Auch das du den Wertbereich hart rein gecodet hast, ist nicht wirklich schön. Dafür gibt es Konstanten, damit du bei einem Systemwechsel keine Probleme bekommst. Auch wenn das in deinem Fall wahrscheinlich eher unwichtig ist. Eine Sprache ist aber eine Routine-Angelegenheit und schlechte Angewohnheiten bekommt man nur schwer raus.
-
Er hat doch jetzt solange an seinem Code rumgespielt bis es funktioniert.
Er glaubt ein Zahlenüberlauf gibt einen segfault. Nun denn.
Wir haben ihn mehrmals auf den Fehler hingewiesen.
Das eine Programm, das den Fehler klar machen sollte hat er richtig korrigiert.Das Programm was er jetzt gepostet hat, hat mit dem Problem nichts zu tun, bzw. tritt es dort durch "glückliche" Umstände nicht auf.
Und jetzt ist es nur nuch rumgetrolle.Ist wie bei "drink and derive"
a = b a² = ab | * a 2a² = a² + ab | + a² 2a² - 2ab = a² - ab | - 2ab 2a(a - b) = a(a - b) | / (a-b) 2a = a | / a 2 = 1
Und dann passen auch 8 Zeichen in ein char[1].
Wer den Fehler findet/weiss, darf ihn behalten.
-
nun denn.. ich werd erstmal paar ganz triviale funktionen benutzen,
"solange ich nix von char arrays weiß" ^^ihr könnt mich später belehren, wenn ich mehr in erfahrung gebracht habe ;P
-
DirkB schrieb:
Wer den Fehler findet/weiss, darf ihn behalten.
| / (a-b)
-
Viele Hinweise hier, aber nur wenig brauchbares dabei. Ist relativ einfach:
# String to double: atof() einsetzen
# double to string: sprintf() einsetzen oder meine Funktion dtoa() von meiner HP herunterladen (verwendet auch sprintf)