PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dezimal Zahl aus Datei



kurm_de
02-10-2005, 11:22
hi,

ich möchte gerne aus einer Datei dezimal Zahlen auslesen und sie dann umwandeln und in eine float variable speichern, um später mit der Zahl rechnen zu können.
Also ich hab eine Datei, in der Datei stehen ein paar Strings und eine dezimal Zahl:

0
Geldbeutel
28.09.2005
Andy
13.87
start

So nun lese ich die Datei aus und speichere die Zeilen in ein Array:

char daten[1000][10][100]; //für 1000 Dateien, 10 Zeilen pro Datei und 100 Zeichen pro Zeile

stream=fopen(nrch,"r");
i=1;
i1=0;

while((fgets(c, 80, stream))!=NULL)
{
strcpy(daten[i][i1],c);
daten[i][i1][strlen(c)-1]='\0'; //damit wird der Zeilenumbruch überschrieben, weis nicht ob man das so machen kann
i1++;
}
fclose(stream);

Nun habe ich probiert mit atof() die dezimal Zahl in der 5. Zeile(mit 0 angefangen 4. Zeile) in eine float Variable umzuwandeln:


float zahl;
zahl=atof(daten[1][4]);


Doch leider zeigt der mir mit printf("%0.2f",zahl) nur 13.00 an. Also die Nachkommastellen sind immer 0.

Ich hoffe es kann mir hier einer Helfen, bin für jede Hilfe sehr dankbar.

Viele Grüße kurm_de

BLUESCREEN3D
02-10-2005, 12:21
Ersetz in der Datei mal 13.87 durch 13,87 und probier aus, ob das geht.



daten[i][i1][strlen(c)-1]='\0'; //damit wird der Zeilenumbruch überschrieben, weis nicht ob man das so machen kann
Ja, das geht so, aber muss das "-1" hinter dem strlen() nicht weg?
Sonst überschreibst du nämlich den letzten Buchstaben der Zeile...

Joghurt
02-10-2005, 14:43
Doch leider zeigt der mir mit printf("%0.2f",zahl) nur 13.00 an. Also die Nachkommastellen sind immer 0.Schreib die Zahlen in der Datei einmal testweise mit Komma statt mit Punkt.

kurm_de
02-10-2005, 17:00
also ich hab jetzt nochmal ein kleines übersichtlicheres Programm geschreiben:

#include <stdio.h>
#include <string.h>

int main()
{
float a=0;

char b[5]="55.55";

a=atof(b);

printf("%0.2f",a);

return;
}

wenn ich nun für b=55.55 schreibe bekomme ich für a=(eine ganz große Zahl) raus
wenn ich für b=55,55 schreibe bekomme ich für a=0.00 raus.
ich weis nicht wieso das nicht funktioniert, ist doch alles richtig oder?
ich hab auch mal char b[6]="55.55\0"; oder char b[6]="55,55\0"; versucht, aber es kommt immer das gleiche raus.

Joghurt
02-10-2005, 17:08
Also erstens muss es char a[6]="55.55"; heißen (die Null muss ja auch noch rein)
und zweitens wird atof in stdlib.h, nicht in string.h definiert.

Die fehlende Deklaration führt dazu, dass atof als int atof() angenommen wird, was natürlich zu Chaos führt.

also
1. a[5] -> a[6]
2. string.h -> stdlib.h
3. Am besten immer mit -Wall compilieren, da wird dann nämlich eine Warnung ausgegeben.
4. return -> return 0;