[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 1000

    double 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.


Anmelden zum Antworten