GMKai Geschrieben 16. Oktober 2003 Teilen Geschrieben 16. Oktober 2003 Hab mal folgendes zusammengetragen: #include <stdio.h> long double summe(long double *f, int n); int main() { char buffer[255]; int i,n=5; long double f[n]; for (i=0;i<=n;i++) { f=i; } printf("Summe= %ld\n",summe(f,n)); gets(buffer); return 0; } long double summe(long double *f, int n) { int zahl=0; long double erg; for (zahl=0;zahl<=n;zahl++) { erg=f[zahl]+erg; } return erg; } als ergebnis kommt leider 0 raus, woran liegt das nun wieder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 16. Oktober 2003 Teilen Geschrieben 16. Oktober 2003 Das sind ein paar Fehler drin: 1. int i,n=5; long double f[n]; long double f[n]; Das n sollte ein const-Ausdruck sein, was es nicht ist. Mag sein, daß Dein Compiler dies akzeptiert, ist aber so kein Standard von C/C++... Selbst wenn f[n] mit n= 5 standardkonform sein sollte: f[5] hat die Felder 0,1,2,3,4. Du schreibst aber in die Felder 0,1,2,3,4,5. 2. long double erg; erg ist nur deklariert, aber nicht definiert. In diesem Fall würde long double erg = 0.0; Sinn machen. HTH Jan [edit] Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. [/edit] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 19. Oktober 2003 Teilen Geschrieben 19. Oktober 2003 Hallo, Original geschrieben von Orffi Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. %ld ist an dieser Stelle aus zwei Gründen schlicht und ergreifend falsch. Zum einen darf %l nur mit Integers verwendet werden und zum anderen ist %d keine Format für eine Fliesskommavariable! Für Fliesskomma-Arithmetik wird %L verwendet. Korrekt wäre also printf("Summe= %Lf\n",summe(f,n)); [/php] Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 19. Oktober 2003 Teilen Geschrieben 19. Oktober 2003 Hallo nic_power, habe mich ein wenig zu flapsig ausgedrückt, als ich meinte: "Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen." Ich meinte schon damit, daß %ld nicht richtig ist. Ich hatte diesen Fehler nur total übersehen, deswegen hatte ich den Hinweis in einem Edit untergebracht. Mein Tip hätte wohl deutlicher ausfallen müssen. Bis denn dann Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GMKai Geschrieben 21. Oktober 2003 Autor Teilen Geschrieben 21. Oktober 2003 >Das sind ein paar Fehler drin: ja, das weiss ich auch :-) >erg ist nur deklariert, aber nicht definiert. In diesem Fall würde long double erg = >0.0; Sinn machen. was heisst das? >Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. auch dann funktioniert es leider noch nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 21. Oktober 2003 Teilen Geschrieben 21. Oktober 2003 Hallo, da Du mit long double arbeitest, solltest Du bei der Ausgabe mit "%Lf" bzw. "%Le" arbeiten. Ein cast bei der Zuweisung in das Array kann auch nicht schaden: #include <stdio.h> long double summe(long double *f, int n); int main() { int i,n=5; long double f[n]; for (i=0;i<n;i++) { f[i]=(long double)i; } printf("Summe= %Le\n",summe(f,n)); } long double summe(long double *f, int n) { int zahl=0; long double erg=0.0; for (zahl=0;zahl<n;zahl++) { erg=f[zahl]+erg; } return erg; } [/php] Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.