2017-02-12 105 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:刚在这一刻更新了我的答案:-) –