标题:为什么每次输出的只有最后一个节点的信息,前面的节点为什么输出不了呢
取消只看楼主
LGD335060087
Rank: 2
等 级:论坛游民
帖 子:36
专家分:13
注 册:2020-3-15
结帖率:80%
已结贴  问题点数:17 回复次数:3 
为什么每次输出的只有最后一个节点的信息,前面的节点为什么输出不了呢
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct player{
    int number;
    char name[20];
    struct player*next;
}Player;
Player*game(int sum);
int main()
{
    int sum;
    printf("请输入玩家个数");
    scanf("%d",&sum);
    Player*head;
    head=game(sum);
    int i;
    while(head!=NULL){
            printf("%d,%s",head->number,head->name);
            
    }
    return 0; 
}
Player*game(int sum)
{
    int i;
    Player*head,*pt,*pre;    //头节点过度节点,尾节点 
    for(i=0;i<sum;i++){
     
        pt=(Player*)malloc(sizeof(Player));
        scanf("%d%s",&pt->number,pt->name);
        if(pt!=NULL){
            head=pt;
            pre=pt;
            pre->next=pt;
        }
        pt->next=NULL;
    }
    return head; 
}
搜索更多相关主题的帖子: head 节点 输出 player int 
2020-04-08 14:14
LGD335060087
Rank: 2
等 级:论坛游民
帖 子:36
专家分:13
注 册:2020-3-15
得分:0 
回复 2楼 吹水佬
不行呢还是只能输出最后一个节点的信息

知识改变命运,代码更改时代
2020-04-09 09:04
LGD335060087
Rank: 2
等 级:论坛游民
帖 子:36
专家分:13
注 册:2020-3-15
得分:0 
以下是引用fulltimelink在2020-4-9 11:37:08的发言:


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct player {
    int number;
    char name[20];
    struct player*next;
}Player;
Player*game(int sum);
int main()
{
    int sum;
    printf("请输入玩家个数");
    scanf("%d", &sum);
    Player*head = game(sum);
    while (head != NULL) {
        printf("%d,%s", head->number, head->name);
        head = head->next;

    }
    return 0;
}
Player*game(int sum)
{
    int i;
    Player*head = NULL, *pt, *pre = NULL;    //头节点过度节点,尾节点
    for (i = 0; i < sum; i++) {

        pt = (Player*)malloc(sizeof(Player));
        scanf("%d%s", &pt->number, pt->name);
        if (pt != NULL) {
            if (i == 0) {
                head = pt;
                pre = pt;
            }
            else {
                pre->next = pt;
                pre = pt;
            }
            
            
        }
        pt->next = NULL;
    }
    return head;
}

  if (i == 0) {
                head = pt;
                pre = pt;
            }
问题1:为什么不可以把if(i==0)改为if(head!=NULL)呢????因为刚开始game函数里head就是空的,进入第二次循环时它就是非空了
问题2:我在game函数里给pt动态申请了内存空间我应该在哪里给它返回内存空间呢?

知识改变命运,代码更改时代
2020-04-10 11:01
LGD335060087
Rank: 2
等 级:论坛游民
帖 子:36
专家分:13
注 册:2020-3-15
得分:0 
以下是引用fulltimelink在2020-4-10 11:18:30的发言:

第二个问题,没明白你想说啥?

问题2:给pt  malloc应该在哪里free(pt)。申请内存空间不还需要返还内存空间吗

知识改变命运,代码更改时代
2020-04-10 13:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500939-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082325 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved