atof() verhält sich seltsam



  • Hallo.
    Schreibe unter SuSE Linux 8.2 (gcc 3.3) ein Programm, welches sich die CPU-Load aus dem Befehl 'top' grept, und dieses dann weiterverarbeitet.
    Nun folgendes: Der Wert wird als char eingelesen, und beim Konvertieren zu double mit atof() ergibt sich z.B. ein Wert von 1717986918 anstatt 10.7.

    Hier ist mal der code (zumindest die relevanten Stellen):

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define warn 95							
    #define alarm 99
    #define server_ip "127.0.0.1"					
    
    int main(int argc, char *argv[])
    {
        char *pch;
        double idle1, result;
        char idle [100];
        FILE * pFile;
    
    system("top -b -n 1 | grep idle | cut -d\\  -f3 > cpu_idle.tmp");		
        pFile = fopen("cpu_idle.tmp", "r");
        if (pFile != NULL)
        {
    	fgets(idle, 100, pFile);
    	fclose (pFile);
        }
        pch = strtok(idle, "%");
        pch = idle;						
        idle1 = atof(pch);					
      printf("Idle: %s, Idle1: %d\n", pch, idle1);	
        result = 100 - idle1;			
      printf("CPU-Last: %d\n", result);
      return 0;
    }
    

    Die Ausgabe des Programms sieht folgendermassen aus:

    Idle: 10.7, Idle1: 1717986918
    CPU-Last: 858993459
    

    Hat hier nun irgendjemand eine Ahnung, was dieses doch etwas schräge Ergebnis verursacht hat?



  • Du solltest doubles nicht mit %d ausgeben.



  • Es ist zum Mäusemelken! Habs vorhin auch schon mit %f probiert und hat nie geklappt. Jetzt gehts magischerweise. Die besten Probleme sind die, die sich von selbst lösen.

    Danke für die Antwort! Hat geholfen.



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten