Reputation: 169
I have a data file and I want to read it into a struct.
This is the contents of the data file
Japan 46.2 16 12.7
Spain 42.8 18.5 39.3
Italy 53.25 19.8 32.8
France 54.5 21.1 31.4
Turkey 52.5 15.6 19.1
This is my code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
struct covid
{
char location[100];
double does_given;
double full_vaccinated;
double of_population_fully_vaccinated;
};
FILE *infile;
infile=fopen("test.txt","r");
if (infile == NULL)
{
fprintf(stderr, "\nError opening file\n");
exit (1);
}
struct covid stats;
while (fread(&stats,sizeof(struct covid),1,infile)){
printf("name =%s, give =%f, full=%f, pop=%f\n",stats.location, stats.does_given, stats.full_vaccinated, stats.of_population_fully_vaccinated);
};
fclose(infile);
return 0;
}
However, when I run this code, I get no output. Why doesn't it work?
Upvotes: 0
Views: 393
Reputation: 50775
Your file contains textual representations of numbers, you cannot blindly read that text into a struct, there is no magic that will transform the textual representation into doubles.
You need to read the file line by line and parse each line individually.
You want something like this:
char line[1000];
while (fgets(line, sizeof(line), infile)) {
sscanf(line, "%s %lf %lf %lf", stats.location, &stats.does_given,
&stats.full_vaccinated, &stats.of_population_fully_vaccinated);
printf("name =%s, give =%f, full=%f, pop=%f\n", stats.location, stats.does_given,
stats.full_vaccinated, stats.of_population_fully_vaccinated);
};
Disclaimer: there is no error checking whatsoever.
Upvotes: 1