0

プログラムに、特定の配列を含む構造があります。数字でランダムなファイルをスキャンし、その内容をその配列に入れたいと思います。

これは私のコードです:(注:これはより大きなプログラムのサンプルであるため、宣言された構造と配列が必要です)

ファイルの内容は基本的に次のとおりです。 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;
}

しかし、問題は、このコードを実行するたびに、次のエラーが発生することです。 代替テキスト

(25) : 警告 508 - ポインターが必要な場所に「double」型のデータが指定されました

追加してみました

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

しかし、それもうまくいきませんでした。同じエラーが発生します。

誰もこの問題の解決策を持っていますか?

4

2 に答える 2

0

この式:(*test).what[z][x]float配列内の a です (これは a に昇格されるdoubleため、警告メッセージが表示されます)。データへのポインター(この場合は a )fscanf()を取得して、データに書き込むことができるようにする必要があります。この行を次のように変更する必要があります。float

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

補足として、astructへのポインターを介して a のメンバーにアクセスすることstructは非常に一般的であるため、C にはそれを行うための特別な->演算子があります。したがって、代わりに(*foo).bar書くことができますfoo->bar

したがって、行は少し読みやすくなります。

q=fscanf(fin,"%5.2f\t",&test->what[z][x]);
于 2010-05-08T21:29:06.140 に答える
0

what[z][x] の値を参照する代わりに読み取ろうとしているようです:

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

これを試して:

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

または、

fscanf(fin,"%5.2f\t",&(test->what[z][x]));
于 2010-05-08T21:30:01.190 に答える