Temperaturdaten aus .csv einlesen und mit C max und minimum Temperatur herausfinden



  • Hi, ich habe eine .csv Datei mit Temperaturdaten und ich lese diese in C ein. Dies klappt auch, aber wenn ich mit einer Schleife meine min und max Temperatur herausfinden möchte funktioniert dies nicht ganz. Mit meiner Schleife erhalte ich zwar die max Temperatur allerdings erhalte ich für die minimum Temperatur immer 0, obwohl die kleinste Temperatur im .csl File 3,4 ist. Kann mir jemand mal meine Schleife ansehen und schauen ob etwas nicht passt?

    while ((token = strtok_r(save, "\n", &save)))
        {
            char* token1;
            char* save1 = token;
    
            double temperature = atof(strtok_r(save1, ",", &save1));
    
    
            if(temperature < min_temperature)   min_temperature = temperature;
            if(temperature > max_temperature)   max_temperature = temperature;
            total_temperature += temperature;
    
    
        }
        fclose(file);
    
    


  • Du bist hier unter "C# und .NET" im falschen Forenbereich (wird aber evtl. von einem Mod verschoben).

    Mit welchen Werten hast du denn die beiden Variablen min_temperature und max_temperature initialisiert?



  • Für mich sieht es so aus, als hättest du min_temperature mit 0 initialisiert und daher wird natürlich keine Temperatur oberhalb von 0 zugewiesen.
    Wenn es möglich ist, setzt man Minimum und Maximum daher vor der Schleife auf den ersten Wert.
    Wenn nicht, könnte man das Minimum mit dem größtmöglichen, das Maximum mit dem kleinstmöglichen Wert initialisieren.



  • Ok ich werde die Tipps dies mal umsetzen. min_temperature habe ich mit double min_temperature = 0.0f; initialisiert.
    Edit:
    Wenn ich z.b. min_temperature mit 100 initialisiere erhalte ich das richtige Ergebnis. Allerdings frage ich mich ob das so ok ist wenn man das so macht. Oder gibt es da eine elegantere Methode? Denn ich weiß im Vorher ja nicht ob min_temperature auch die 100 Grad übersteigen wird.



  • Dafür gibt es in <float.h> die Konstante (Makro) DBL_MAX, s. Numeric limits (unter "Limits of floating point types").


  • Mod

    @Th69 sagte in Temperaturdaten aus .csv einlesen und mit C max und minimum Temperatur herausfinden:

    Dafür gibt es in <float.h> die Konstante (Makro) DBL_MAX, s. Numeric limits (unter "Limits of floating point types").

    Nein! Bei Integern kann das gerade noch funktionieren. Bei float funktioniert das schon nicht mehr, denn es gibt Werte, die tatsächlich als größer vergleichen zu DBL_MAX/FLT_MAX. Und bei vielen anderen Datentypen, die man auch vergleichen kann, gibt es solche Werte gar nicht. Was ist die maximale Zeichenkette?

    Richtige Vorgehensweise, die immer, mit allem funktioniert und man daher nur ein einziges Mal im Leben erfinden braucht: Man startet mit dem ersten gegebenen Wert.



  • strtok_r ist kein C-Standard, nur POSIX.
    Mit atof kannst du fehlerhaft übergebene Argumente nicht erkennen.


Log in to reply