char Wert in einen float Wert umwandeln.



  • Ich habe ein Problem ich möchte einen char Wert in einen float Wert umwandeln, hier ein Beispiel.:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    char zahl[50]
    float umwandlung;
    
    printf("Zahl: ");
    gets(zahl);
    
    // Umwandlung
    
    umwandlung = atoi(zahl);
    
    printf("Neuer Wert: %i", umwandlung);
    
    }
    

    Aber es kommt kein Fließkommazahl raus sondern eine lange Zahl nach hinten, z.B. 1023404432.

    Kann einer mir helfen?



  • atof wäre richtige Lösung nicht atoi

    Allerdings ziehe ich sttod vor

    Diese Lösung wandelt eine Eingabe in eine float Zahl um. wenn der Eingabe string keine Zahl oder nach dem Ende der Zahl noch weitere
    Zeichen enthält zeigt *err nicht auf '\0' und man weis das ein Fehler aufgetreten ist

    char* err; 
    float umwandlung = strtod( zahl, &err, 10 ); /* 10 ist die basis des zahlensystems */ 
    if ( *err == '\0' ) 
      {
      printf("Zahl ist keine float"};
      }
    


  • Hallo!

    Du bist hier definitiv im falschen Forum, sollte nach Ansi C verschoben werden.

    In C++ sieht das etwa so aus:

    #include <iostream>
    #include <cstdlib>
    
    int main()
    {
            char zahl[50];
            float umwandlung;
    
            std::cout << "Zahl: ";
            std::cin >> zahl;
    
            // Umwandlung
            umwandlung = std::atof(zahl);
    
            std::cout << "Neuer Wert: " << umwandlung << std::endl;
    }
    

    Zur Erklärung: die Funktion atof wandelt die mit cin eingelesene Zeichenkette in einen float-Wert um (in Wirklichkeit wandelt sie den Wert in einen double-Wert um, der implizit zu float gecastet wird). Dieser Wert wird dann wieder ausgegeben.

    Du gibst einen float-Wert mit printf als int aus, solltest ihn aber als float ausgeben.
    So: printf("%f", float_wert); Außerdem geschieht die Umwandlung mit atof, nicht mit atoi.

    Außerdem fehlt dir noch ein Semikolon nach der Deklaration des Char-Arrays und die Funktion gets sollte nicht mehr verwendet werden, weil sie Buffer-Overflows erzeugt, wenn der Benutzer mehr Zeichen eingibt als eingelesen werden können!

    [edit] Kleiner Fehler korrigiert 😉



  • Wie würde das in Ansi C aussehen der Code?



  • Im simpelsten Fall ohne Fehlerhandling

    umwandlung = atof(zahl);
    

    Mit Fehlerhandling siehe mein leztes posting

    Der Rest wäre dein Code bis auf diese Zeile

    printf("Neuer Wert: %f", umwandlung);
    


  • Hier noch ein Beispiel was nicht so richtig umwandelt..

    #include <stdio.h>
    #include <stdlib.h>
    
    void umrechnung(char *wert1, char *wert2);
    
    int main(void)
    {
    char a[50];
    char b[50];
    
    printf("Die Errechnung eines Durchschnitts\n");
    printf("Zahl1: ");
    gets(a);
    printf("Zahl2 ");
    gets(b);
    
    printf("a hat: %s, b hat: %s\n",a,b);
    
    umrechnung(a,b);
    
    getchar();
    
    }
    void umrechnung(char *wert1, char *wert2)
    {
    
    int google, hoogle;
    
    google = atoi(wert1);
    hoogle = atoi(wert2);
    
    printf("google: %f, hoogle: %f", google, hoogle);
    
    }
    


  • spielgrips, richtig hinschaun..

    atoi char to integer

    atof char to float

    !!



  • Ich habs schon, zum Glück konnte 👍 👍 Japro 👍 👍 mir helfen.


Anmelden zum Antworten