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.