开发者

Scan file contents into an array of a structure

开发者 https://www.devze.com 2022-12-29 10:05 出处:网络
I have a structure in my program that contains a particular array. I want to scan a random file with numbers and put the contents into that array.

I have a structure in my program that contains a particular array. I want to scan a random file with numbers and put the contents into that array.

This 开发者_运维技巧is my code : ( NOTE : This is a sample from a bigger program, so I need the structure and arrays as declared )

The contents of the file are basically : 5 4 3 2 5 3 4 2

#include<stdio.h>

#define first 500
#define sec 500


struct trial{
  int f;
  int r;
  float what[first][sec];
};

int trialtest(trial *test);

main(){
  trial test;
  trialtest(&test);
}

int trialtest(trial *test){
  int z,x,i;
  FILE *fin;
  fin=fopen("randomfile.txt","r"); 
  for(i=0;i<5;i++){
      fscanf(fin,"%5.2f\t",(*test).what[z][x]);
    }
  fclose(fin);
  return 0;
}

But the problem is, whenever this I run this code, I get this error :

Scan file contents into an array of a structure

(25) : warning 508 - Data of type 'double' supplied where a pointer is required

I tried adding

do{
   for(i=0;i<5;i++){
      q=fscanf(fin,"%5.2f\t",(*test).what[z][x]);
    }
  }while(q!=EOF);

But that didnt work either, it gives the same error.

Does anyone have a solution to this problem ?


This expression: (*test).what[z][x] is a float in the array (which gets promoted to a double, thus the warning message). fscanf() needs to get a pointer to the data (in this case a float), so that it can write to it. You need to change this line to:

q=fscanf(fin,"%5.2f\t",&(*test).what[z][x]);

As a side note, accessing the member of a struct through a pointer to that struct is so common that you have a special -> operator in C to do just that. So instead of (*foo).bar you can write foo->bar.

So the line becomes a slightly more readable:

q=fscanf(fin,"%5.2f\t",&test->what[z][x]);


Looks like you're trying to read the value of what[z][x] instead of referencing it:

fscanf(fin,"%5.2f\t",(*test).what[z][x]);

Try this:

fscanf(fin,"%5.2f\t",&((*test).what[z][x]));

Or,

fscanf(fin,"%5.2f\t",&(test->what[z][x]));
0

精彩评论

暂无评论...
验证码 换一张
取 消