Char naar float

Status
Niet open voor verdere reacties.

Roel0

Gebruiker
Lid geworden
8 feb 2011
Berichten
17
Gegroet ,
Ik heb een klein probleempje met het inlezen van een bestand naar een structure , in deze structure zit een float:

Code:
typedef struct
{
	char naam[8];
	int leeftijd;
	float gewicht;
} Paspoort; 
Paspoort *ontleed(char *buffer)
{
	static Paspoort a;
	char *src;
	char *dst;
	
	src = buffer;
	dst = zoek(src);
	strcpy(a.naam , src);	
	
	src = dst+1;
	dst = zoek(src);	
	a.leeftijd = strtol(src , NULL , 0);
	
	src=dst+1;
	dst = zoek(src);
	a.gewicht = atof(src);
	
	return &a;
	}
char *zoek(char *v)
{
	char *t = v;	
	while( *t != ';' && *t != '\n')
		t++;	
	*t = '\0';	
	return t;
	}

Bij a.gewicht = atof(src); loopt het fout , hij wou 74.4 moeten afprinten , maar print 170393 af. Iemand enig idee?

ALvast bedankt.
 
Ik heb geen idee of het er mee te maken heeft, maar uit mijn hoofd geeft atof een "double" terug en geen "float".
 
Btw als ik de string zelf afdruk , zie ik wel het gewenste resultaat , het probleem zit dus in de omzetting.
 
Kan je de volledige code posten zodat we het uit kunnen proberen? Ik zie namelijk geen fouten in de code die je gepost hebt.
 
header
Code:
#define INPUT "aaa.dat"

typedef struct
{
	char naam[8];
	int leeftijd;
	float gewicht;
} Paspoort;

Code:
#include <stdio.h>
#include <string.h>
#include "A11.h"

char *zoek(char *v);
Paspoort *ontleed(char *buffer);
void main()
{
	FILE *pas;
	int n = 1;
	char buffer[200];
	Paspoort *twee;
	pas = fopen(INPUT, "rb");
	fread(&buffer , sizeof(buffer) , 1 ,pas);
	twee = ontleed(buffer);	
	fclose( pas);
	printf("%s\n%d\n%lf" , twee->naam, twee->leeftijd , twee->gewicht);	
	}
Paspoort *ontleed(char *buffer)
{
	static Paspoort a;
	char *src;
	char *dst;
	
	src = buffer;
	dst = zoek(src);
	strcpy(a.naam , src);	
	
	src = dst+1;
	dst = zoek(src);	 
	a.leeftijd = strtol(src , NULL , 0);
	
	src=dst+1;
	dst = zoek(src);
	a.gewicht = strtod(src , 0);
	
	return &a;
	}
char *zoek(char *v)
{
	char *t = v;
	
	while( *t != ';' && *t != '\n')
		t++;
	
	*t = '\0';
	
	return t;
	}

;)

In aa.dat staat het volgende
roel;20;74.4;
 
Laatst bewerkt:
Ik denk dat je ook nog
#include <stdlib.h>
moet toevoegen.
In stdlib.h staat de declaratie van strtod() en ook van atof().

Als de declaratie er niet bij staat gaat de compiler er vanuit dat de functie strtod() een int teruggeeft en geen double.
Dit geldt ook voor atof().
En dan gaat het in dit geval dus fout.
 
Laatst bewerkt:
Ik denk dat je ook nog
#include <stdlib.h>
moet toevoegen.
In stdlib.h staat de declaratie van strtod() en ook van atof().

Als de declaratie er niet bij staat gaat de compiler er vanuit dat de functie strtod() een int teruggeeft en geen double.
Dit geldt ook voor atof().
En dan gaat het in dit geval dus fout.

Bedankt voor de tip , hier was ik niet van op de hoogt dat dit een probleem kon opleveren.
Het werkt nu dus , allemaal bedankt voor julllie bijdrage!
Vriendelijke groeten,
Roel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan