Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Reading data from a file in C

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

#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?

>Solution :

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading