打印链表的浮动元素显示不正确?

时间:2013-10-01 03:45:35

标签: c floating-point linked-list

我有一个链接列表,它从文件中读取一些信息并将其显示在屏幕上。所有内容都正确读取,但当我显示“秒”时,显示的数字类似于-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;
        }
    }

任何人都知道发生了什么事?

2 个答案:

答案 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。换句话说,你:

  1. 分配新的p
  2. counter==1,所以你要花时间,
  3. 增加counter
  4. 分配一个新的p(并放弃之前的一个)
  5. counter==2,所以你把名字放在里面然后存放,
  6. ...
  7. 我想你希望malloc()发生在if (counter==1)内。

    然后,你没有重置计数器,所以每个下一个玩家都没有得到counter==3以后的任何东西,等等。