2017-02-12 3 views
-1

は、私は言う:structポインタを介して構造体に情報をスキャンしますか? Cにおいて

typedef struct player { 
     char Fname[25]; 
     int Singles; 
     int Doubles; 
     int Triples; 
     int Homeruns; 
    } Player; 

主に()Iは

Player* players; 

にプレーヤー型へのポインタを定義しました。今、私はファイルから各プレーヤーのタイプのデータを読み込む機能を持っていると言う:

void read_from_file(char* filename, Player* players, int size) { 
     FILE* fp; 
     fp = fopen(filename, "r"); 
     while (players < size) { 
      fscanf(fp, "%s%d%d%d%d", *players.Fname, *players.Singles, *players.Doubles, *players.Triples, *players.Homeruns); 
      players++; 
     } 
    } 

それは何かで要求されるなど、「fnameは、」「シングルス」「ダブルス」と言っていない構造体または組合しかし、プレイヤーは逆参照されているので、構造体の権利を与える必要がありますか?どんな助けもありがとうございます。

+2

代わりに、より不器用な表記法の

scanf("%d", &player->Singles); 

を...書くことができます! –

+0

あなたは正しいです、申し訳ありません。それは私のプログラムではなく、質問の誤りでした。私はまだ同じコンパイルエラーを受けています –

+0

'fscanf'のマニュアルページを読んで、パラメータが正しいことを確認しましたか? 'fopen'からの戻り値を確認するのにも私の助けがあれば –

答えて

2

*players.Fnameが実際に(働くであろう)、*(players.Fname)playersタイプPlayer*であるとして動作しない)、およびない(*players).Fnameを意味するので、主な問題は、演算子の優先順位です。

とにかく、ポインタ変数を使用してメンバーにアクセスするには、演算子->を使用できます。だから...あなたはfscanf` `で` stream`については言及しなかった

scanf("%d", &(*player).Singles); 
+0

参照されていないフォーム 'players-> Fname'を使うと読みやすくなります。 –

+1

@J。 Piquard:ちょうどこの瞬間に私の答えを更新しました:-) –

関連する問題