C使用链表的错误

C使用链表的错误,c,linked-list,C,Linked List,我和我的朋友正在做一个像鸭子鹅一样工作的项目,我们在使用需要使用的链表时遇到了问题。从几个测试输入中,我可以看出,当我们插入名称(字符串)时,似乎出现了一个问题,它没有正确地保存到LL,因此当我们试图打印它时崩溃。您可以在此处访问项目信息: 示例输入和输出如下所示: **Input** 2 3 Bob Cody John 2 2 8 Carol Casey Nick Kirsten Ben Bo Billy Heather 3 4 **Output:** Game 1: Cody Game 2

我和我的朋友正在做一个像鸭子鹅一样工作的项目,我们在使用需要使用的链表时遇到了问题。从几个测试输入中,我可以看出,当我们插入名称(字符串)时,似乎出现了一个问题,它没有正确地保存到LL,因此当我们试图打印它时崩溃。您可以在此处访问项目信息:

示例输入和输出如下所示:

**Input**
2
3
Bob
Cody
John
2 2
8
Carol
Casey
Nick
Kirsten
Ben
Bo
Billy
Heather
3 4
**Output:**
Game 1:
Cody

Game 2:
Billy
Bo
Carol
Kirsten
Nick
代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
    char PlayerNames;
    struct Node *next;
}

Players;

void insert(Players *ptr, char PlayerNames);
void delete(Players *ptr, char PlayerNames);
void print(Players *Start, Players *ptr);

void main()
{
    int NumberOfGames, NumberOfDucks, Rounds, NumberOfPeople, i, j, k, m;
    char Names, data;
    Players *Start, *temp;
    Start = (Players *)malloc(sizeof(Players));
    temp = Start;
    temp -> next = Start;

    scanf("%d", &NumberOfGames);

    for (i = 0;i < NumberOfGames;i++)
    {
        scanf("%d", &NumberOfPeople);

        for (j = 0;j < 3;j++)
        {
            scanf("%s", &Names);
            insert(Start, Names);
        }

        scanf("%d %d", &Rounds, &NumberOfDucks);

        for (k = 0;k < Rounds;k++)
        {
            for (m = 0;m < NumberOfDucks;m++)
                Start -> next;

            delete(Start, data);
        }
    }

    printf("Game %i:\n", i);
    print(Start, Start -> next);
    printf("\n");
}

void insert(Players *ptr, char PlayerNames)
{
    Players *Start = ptr;

    while (ptr -> next != Start)
    {
        ptr = ptr -> next;
    }

    ptr -> next = (Players *)malloc(sizeof(Players));
    ptr = ptr -> next;
    ptr -> PlayerNames = PlayerNames;
    ptr -> next = Start;
    printf("inserting\n");
    return ;
}

void delete(Players *ptr, char PlayerNames)
{
    printf("deleting\n");
    Players *Start = ptr;

    while (ptr -> next != Start && (ptr -> next) -> PlayerNames != PlayerNames)
    {
        ptr = ptr -> next;
    }

    Players *temp;
    temp = ptr -> next;
    ptr -> next = temp -> next;
    free(temp);
    return ;
}

void print(Players *Start, Players *ptr)
{
    printf("printing\n");

    if (ptr == Start)
        return;

    printf("%s", ptr -> PlayerNames);
    print(Start, ptr -> next);
    return ;
}
#包括
#包括
定义表结点
{
木炭片;
结构节点*下一步;
}
球员;
无效插入(玩家*ptr,角色玩家名称);
无效删除(玩家*ptr,角色玩家名称);
无效打印(玩家*开始,玩家*ptr);
void main()
{
int NumberOfGames,NumberOfDucks,Rounds,NumberOfPeople,i,j,k,m;
字符名称、数据;
玩家*开始,*临时;
开始=(球员*)马洛克(球员人数);
温度=启动;
温度->下一步=开始;
scanf(“%d”和NumberOfGames);
对于(i=0;i下一步;
删除(开始,数据);
}
}
printf(“游戏%i:\n”,i);
打印(开始,开始->下一步);
printf(“\n”);
}
无效插入(玩家*ptr,角色玩家名称)
{
玩家*Start=ptr;
同时(ptr->next!=开始)
{
ptr=ptr->next;
}
ptr->next=(玩家*)malloc(玩家数量);
ptr=ptr->next;
ptr->PlayerNames=PlayerNames;
ptr->next=开始;
printf(“插入\n”);
返回;
}
无效删除(玩家*ptr,角色玩家名称)
{
printf(“删除”);
玩家*Start=ptr;
while(ptr->next!=开始和(ptr->next)->PlayerNames!=PlayerNames)
{
ptr=ptr->next;
}
球员*临时工;
temp=ptr->next;
ptr->next=temp->next;
免费(临时);
返回;
}
无效打印(玩家*开始,玩家*ptr)
{
printf(“打印”);
如果(ptr==开始)
返回;
printf(“%s”,ptr->PlayerNames);
打印(开始,ptr->下一步);
返回;
}

优化问题格式,使用所有警告和调试信息(例如使用
gcc-Wall-g
)进行编译,并学习使用调试器(例如
gdb
),问题又是什么?问题在你接近链表之前就开始了。您不知道C中的字符串是什么。提示:
char
不是字符串,而是单个字符。读一篇关于C.K&R的介绍性文章。