0

私と私の友人は、ダック ダック グースのように機能するプロジェクトに取り組んでいますが、使用する必要があるリンク リストの使用に問題があります。いくつかのテスト入力から、名前 (文字列) を挿入するときに問題があるようで、LL に適切に保存されず、そのために印刷しようとするとクラッシュします。プロジェクト情報はhttp://tinyurl.com/DuckDuckBootからアクセスできます。

サンプルの入力と出力は次のとおりです。

**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 ;
}
4

0 に答える 0