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!!
CodePudding user response:
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.
CodePudding user response:
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");
}