[Beginner] Fehlermeldung syntax error before "return"
-
Hallo,
ich bekomme folgende fehlermeldung ausgegeben,
gcc version 3.4.6 [FreeBSD] 20060305
atof.c: In function `main':
atof.c:13: error: syntax error before "return"[cpp]#include <ctype.h>
#define MAXLINE 1000double atof();
double a;int main()
{
char s[MAXLINE] = "meine katze hat 3 ohren";a = atof(s)
return;
}/* atof: Ziffernkette s nach double umwandeln */
double atof(char s[])
{
double val, power;
int i, sign;for (i = 0; isspace(s[i]); i++)
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
i++;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
}[cpp]
-
wie wäre es, wenn du die Fehlermeldung liest und dann die enstrpechende Stelle im Quellcode? Der Fehler ist offensichtlich.
Wer liest, ist klar im Vorteil...
-
stimmt fehler war offensichtlich
nun neues problem:atof.c: In function `main':
atof.c:14: warning: too many arguments for format#include <ctype.h> #include <stdio.h> #define MAXLINE 1000 double atof(); double a; void main() { char s[MAXLINE] = "meine"; a = atof(s); printf("a = \n", a); return; } /* atof: Ziffernkette s nach double umwandeln */ double atof(char s[]) { double val, power; int i, sign; for (i = 0; isspace(s[i]); i++) ; sign = (s[i] == '-') ? -1 : 1; if (s[i] == '+' || s[i] == '-') i++; for (val = 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - '0'); if (s[i] == '.') i++; for (power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val + (s[i] - '0'); power *= 10.0; } return sign * val / power; }
-
atof wird in stdlib.h definiert, du brauchst es nicht selber zu definieren, zumal du es sogar falsch gemacht. Siehe man: atof(3)
Signatur:
double atof(const char *nptr);
Aber am besten machst du:
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #define MAXLINE 1000 double atof(); double a; int main() /* void main ist falsch */ { char s[MAXLINE] = "meine"; a = atof(s); ...
Aber all das hättest du bemerkt, wenn du den Fehler und die Dokumentation zu atof (als BSD Nutzer sind manpages Pflicht) gelesen hättest. Also RTFM!
-
Gerade habe ich bemerkt, dass du atof selber implementierst.
In deinem Prototyp steht
double atof();
in der Deklaration
double atof(char s[]) { double val, power; int i, sign; ...
sie sind also nicht ganz gleich, das mag der Compiler nicht.
-
das dürfte eig. gar nix machen, weil er dann ja die richtige atof funktion nimmt!
die fehlermeldung bezieht sich auf zeile 14, die printf Funktion. Das passiert, weil du für das a keinen "platzhalter" im ersten argument eingebaut hast.. so kann er mit dem zweiten nix anfangen!
-
du bist ein sehr netter mensch, ich danke dir für deine hilfe
-
beselbube schrieb:
das dürfte eig. gar nix machen, weil er dann ja die richtige atof funktion nimmt!
die fehlermeldung bezieht sich auf zeile 14, die printf Funktion. Das passiert, weil du für das a keinen "platzhalter" im ersten argument eingebaut hast.. so kann er mit dem zweiten nix anfangen!
allerdings, hab mich wohl verzählt.