我有一个链接列表,它从文件中读取一些信息并将其显示在屏幕上。所有内容都正确读取,但当我显示“秒”时,显示的数字类似于-431602080.000000
,而不是27.123000
。我不知道为什么。
//GLOBAL VARIABLES
struct PlayerTime* list_head = NULL;
void besttimes_view()
{
struct PlayerTime *p;
p = list_head;
while(p!=NULL){
printf("%f : %s\n", p->seconds, p->name); //This prints the name correctly, but the number is wrong. Something like -431602080.000000 : Calvin
p = p->next;
}
}
任何人都知道发生了什么事?
答案 0 :(得分:2)
while((fgets(input,MAX_STR_LEN,fileName)!=NULL)){
p=(struct PlayerTime*)malloc(sizeof(struct PlayerTime));
你使用每个fgets()malloc一个新的playertime,但你只将它添加到 列出所有其他fgets()。您添加到列表中的那个没有 设置秒数,只有名称。
换句话说,你设置秒数的游戏时间,永远不会被添加 到列表。只有您设置名称的那个才会被添加到列表中。
if(counter==1){
p->seconds=atof(input); // this p is never added to the list
printf("%f\n",p->seconds); //This prints the number as it should be (e.g. 27.123000)
}
if(counter==2){
strcpy(p->name,input); // this p is added to the list
counter=0;
p->next=list_head;
list_head = p;
}
答案 1 :(得分:1)
首先,我要在p
分支之外分配counter==1
。换句话说,你:
p
,counter==1
,所以你要花时间,counter
,p
(并放弃之前的一个),counter==2
,所以你把名字放在里面然后存放,我想你希望malloc()
发生在if (counter==1)
内。
然后,你没有重置计数器,所以每个下一个玩家都没有得到counter==3
以后的任何东西,等等。