简体   繁体   中英

How to read data from file with fscanf in c-language

I want to import numbers (40000 in total, space-separated) (format: 2.000000000000000000e+02) with "fscanf" and put it in a 1D-Array. I tried a lot of things, but the numbers I am getting are strange.

What I've got until now:

int main() {
        FILE* pixel = fopen("/Users/xy/sample.txt", "r");
        float arr[40000];
        fscanf(pixel,"%f", arr);
   
        for(int i = 0; i<40000; i++)
            printf("%f", arr[i]);
}

I hope somebody can help me, I am a beginner;-) Thank you very much!!

Instead of:

fscanf(pixel,"%f", arr);

which is the exact equivalent of this and which read only one single value:

fscanf(pixel,"%f", &arr[0]);

you want this:

for(int i = 0; i<40000; i++)
   fscanf(pixel,"%f", &arr[i]);

Complete code:

#include <stdio.h>
#include <stdlib.h>

int main() {
  FILE* pixel = fopen("/Users/xy/sample.txt", "r");
  if (pixel == NULL)   // check if file could be opened
  {
    printf("Can't open file");
    exit(1);
  }

  float arr[40000];
  int nbofvaluesread = 0;

  for(int i = 0; i < 40000; i++)  // read 40000 values
  {
     if (fscanf(pixel,"%f", &arr[i]) != 1)
       break;     // stop loop if nothing could be read or because there
                  // are less than 40000 values in the file, or some 
                  // other rubbish is in the file
     nbofvaluesread++;
  } 
  
  for(int i = 0; i < nbofvaluesread ; i++)
     printf("%f", arr[i]);

  fclose(pixel);  // don't forget to close the file
}

Disclaimer: this is untested code, but it should give you an idea of what you did wrong.

You need to call fscanf() in a loop. You're just reading one number.

int main() {
    FILE* pixel = fopen("/Users/xy/sample.txt", "r");
    if (!pixel) {
        printf("Unable to open file\n");
        exit(1);
    }

    float arr[40000];
    for (int i = 0; i < 40000; i++) {
        fscanf(pixel, "%f", &arr[i]);
    }

    for(int i = 0; i<40000; i++) {
        printf("%f", arr[i]);
    }
    printf("\n");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM