2017-02-12 104 views
-1

在C中,說我有:通過結構指針將信息掃描到結構中?

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

和在main()我定義

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

你沒有提到的'stream'在'fscanf'! –

+0

你說得對,對不起。這是一個錯誤,但不是在我的程序中。我仍然收到相同的編譯器錯誤 –

+0

您是否想過閱讀'fscanf'手冊頁並確保參數是正確的。如果我還幫助檢查'fopen'的返回值 –

回答

2

的主要問題是運算符優先級,因爲*players.Fname實際上意味着*(players.Fname)(不工作作爲playersPlayer*型),而不是(*players).Fname,(這工作)。

無論如何,您可以使用運算符->通過指針變量訪問成員。所以,你可以寫......

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

而不是更笨拙的符號......

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

未引用形式'players-> Fname'的使用將更具可讀性。 –

+1

@J。 Piquard:剛在這一刻更新了我的答案:-) –