Zuweisungsfehler
-
Hallo erstmal, bin neu hier, und hoffe, dass das in Ordnung ist, wenn ich hier mal meinen Code poste, und um Hilfe bitte.
Muss ein Programm schreiben, und finde einfach nicht heraus warum die Zuweisung von y0 nicht richtig funktioniert.
Hier der Anfang meines Codes:
...
if(argc<5){printf("Aufruf mit Parametern x0 X y0 n\n"); return EXIT_FALURE;} else {x0=atof(argv[1]); X0=atof(argv[2]); y0=atof(argv[3]); n=atoi(argv[4]); dat=fopen("datenrunge.dat","w"); fprintf(dat,"%lf\n",y0); h=(X-x0)/n; y=y0; x=x0; }
...
ich rufe mein Programm mit "./a43 -3.0 3.0 1/901 32" auf und meinem y0 wird dann immer 1 zugewiesen, obwohl es laut Folge eigentlich 1/901 sein sollte. Woran könnte das liegen? Habe es extra in Zeile 10 ausgeben lassen, um zu schauen, welchen Wert es an der Stelle dann hat.
Vielen Dank schonmal, Grüße, micronYx
-
atof() kann nur Zahlen erkennen und umwandeln, aber nicht rechnen* - für sowas mußt du dir schon eine Spezialbibliothek suchen, die den Ausdruck "1/901" parsen und in einen sinnvollen Wert umwandeln kann.
* Im Klartext: das / erkennt es nicht mehr als legalen Bestandteil einer Gleitkommazahl, deswegen interpretiert er nur den Teil davor und ignoriert den Rest.
-
Den Ausdruck kannst Du mit einer Funktion "umwandeln"
Ich hab Dir mal das hier als Ansatz geschrieben:double bruchtodez(char ausdruck[]) { int dividend; int divisor; char *zgr; dividend = atoi(ausdruck); zgr = strchr(ausdruck, 47); zgr++; divisor = atoi(zgr); return (((double)dividend)/((double)divisor)); }
-
danke für die schnellen Antworten
Leider bringen sie mir nichts.
@CStoll: dachte auch erst, dass es daran liegt, aber das kann es nicht sein, bei einem anderen Programm funktioniert es wunderbar, und der Code ist bis auf das Verfahren, das angewendet wird, der selbe!
@Simonek: leider kann ich damit wenig anfangen
Muss es mir nochmal genau anschauen, der Fehler muss etwas einfaches sein, was ich übersehen habe.
Danke, Grüße, micronYx
-
micronYx schrieb:
@CStoll: dachte auch erst, dass es daran liegt, aber das kann es nicht sein, bei einem anderen Programm funktioniert es wunderbar, und der Code ist bis auf das Verfahren, das angewendet wird, der selbe!
Bis Du das bewiesen hast, behaupte ich dass Du Dir das ausgedacht hast.
-
lol, warum sollte ich mir das ausdenken?? unfassbar...
Komm morgen an meine Uni und ich zeigs dir
-
Ich muss nicht an Deine Uni kommen, ich weiss bereits dass atof in ANSI-C weder Schrägstriche als Bruchstriche interpretiert noch daraus eigenständig Berechnungen durchführt. Der Standard meint dazu übrigens:
7.20.1.1 schrieb:
The atof function converts the initial portion of the string pointed to by nptr to
double representation. Except for the behavior on error, it is equivalent to
strtod(nptr, (char **)NULL)Und zu strtod:
7.20.1.3 Anfang Absatz 3 schrieb:
The expected form of the subject sequence is an optional plus or minus sign, then one of
the following:
— a nonempty sequence of decimal digits optionally containing a decimal-point
character, then an optional exponent part as defined in 6.4.4.2;Vom Schrägstrichen steht auch im Rest des Kapitels nichts.