Frage zur Funktion atof



  • Hallo!

    Ich hab da ein kleines Problem. Ich möchte bestimmte Strings wie "21.4" in einen float oder double Wert umwandeln. Dazu gibt es ja die Funktion atof und so habe ich sie eingesetzt:

    double d_tmp; //float auch schon probiert
    char mystring[] = "21.4";
    d_tmp = atof(mystring);

    Doch statt 21.4 steht in d_tmp eine 1717986918.000000
    Statt Arrays hab ichs auch schon mit Zeigern probiert, aber selbes Ergebnis. Was mache ich Falsch?? Mit atoi funktioniert es bei mir.

    Ich benutze den gcc Compiler unter Linux, thx für eure Hilfe!

    Schöne Grüße,

    Dennis



  • mach mal

    d=strtod(string,0);

    und wenn es nicht klappt, schau dir mal an, was in errno steht.



  • Hi,

    ich vermute du hast den wert mit printf("%d", DOUBLE") kontrolliert da kommt dann nämlich bei 21.4 raus musst %f für gleitkomma nehmen 🙂

    #include <stdio.h>
    #include <math.h>
    
    int main (void)
    {
    	char *pszZahl = "21.4";
    	double dZahl;
    
    	dZahl = atof(pszZahl);
    	printf("%d\n", dZahl); /* FALSCH */
    	printf("%f\n", dZahl); /* RICHTIG */
    }
    

    Gruss

    Heiko



  • habs mit strtod(string, 0) versucht, kam aber zum selben Ergebnis. Wie kann ich schauen was in erno steht?

    @HeSch: Hab ich schon alles kontrolliert, stimmt alles, habs auch schon mit %lf probiert, aber nichts half.



  • DennisF83 schrieb:

    Wie kann ich schauen was in erno steht?

    perror("strtod error");



  • Also jetzt hab ich das ganze mal ganz seperat für sich compiliert und genau aus diesem Quellcode:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    double d_tmp;
    char token[] = "21.4";
    d_tmp = strtod(token,0);
    perror("strtod error");
    printf("Ausgabe: %f", d_tmp);
    
    getchar();
    
    return 0;
    }
    

    kam das hier raus:

    strtod error: Success
    Ausgabe: 1717986918.000000

    Dennis



  • Du hast stdlib.h nicht eingebunden. Dadurch nimmt der Compiler implizit an, dass strtod einen Rückgabetyp von int hat.



  • Oh mann, es tut mir echt sooo leid, dass ich euch damit hab belästigt. Ich hab doch tatsächlich die stdlib vergessen mit einzubinden 😡

    Hoffe ihr seid mir jetzt nicht böse, habe auch 2 Stunden meines Lebens damit verschwendet.

    Euer dankender

    Dennis



  • Und Du hast in den Compiler-Optionen den Warning Level zu niedrig eingestellt, sonst hätte Dich der Compiler bzw. Preprozessor schon darauf aufmerksam gemacht, daß ihm Prototypen fehlen. Typischer Fall von Selbstüberlistung - Fehler lassen sich nunmal nicht beseitigen, indem man Fehlermeldungen abschaltet ... 😃



  • hmmm wie kann ich sowas denn einstellen? Hab nichts verändert. Ich benutze den gcc unter Linux.



  • DennisF83 schrieb:

    hmmm wie kann ich sowas denn einstellen? Hab nichts verändert. Ich benutze den gcc unter Linux.

    Wichtigster Parameter -Wall
    Zeigt alle Warnungen an.


Anmelden zum Antworten