0

名前と生年月日情報を含むリンクリストを作成しようとしています。個人情報は構造体で宣言されており、newNodeを作成すると、そのnewNodeは後でリストの最後に追加されます。何が起こっているのかというと、insertNode関数で無限ループが発生しています。これは、どういうわけか、createNode関数でリストの先頭が変更されているためです。私が持っているものがうまくいくこともあれば、うまくいかないこともあります。それは、私が捕まえられていない小さな間違ったことをしていると私に信じさせます。

以下のコードを投稿しました。それ以上にメインはありますが、それまでは大丈夫だったので投稿しませんでした。

typedef struct info
{
    char *firstName;
    char *lastName;
    int month;
    int day;
    int year;
    struct info *next;
} person;

person *createNode(char *fName, char *lName, char *m, int d, int y)
{
    person *n = malloc(sizeof(person));
    n->firstName = strdup(fName);
    n->lastName = strdup(lName);
    n->month = convertMonthCharToInt(m);
    n->day = d;
    n->year = y;
    n->next = NULL;

    return n;
}

person *insertNode(person *head, person *newNode)
{
    person *temp = NULL;
    temp = head;

    if(head == NULL)
        return newNode;

    for(temp = head; temp->next!=NULL; temp = temp->next);

    if(head->next == NULL)
        head->next = newNode;

    return head;
}

int main()

{
    int numClasses = 0, numStudents = 0, numQueries = 0, d = 0, y = 0, j = 0;
    char fName[31], lName[31], m[11], queryFirstName[31], queryLastName[31];
    person *print;

    FILE *readFile = fopen("birthday2.txt", "r");

    if(readFile == NULL)
    {
        printf("File does not exist. Closing program.\n");
        return 0;
    }

    fscanf(readFile, "%d", &numClasses);

    while(i<numClasses)
    {
        person *head = malloc(sizeof(person));
        person *newNode = malloc(sizeof(person));
        person *result = malloc(sizeof(person));
        head = NULL;
        fscanf(readFile, "%d", &numStudents);
        j = 0;
        while(j<numStudents)
        {
            //read names in from file
            fscanf(readFile, "%s", &fName);
            fscanf(readFile, "%s", &lName);
            fscanf(readFile, "%s", &m);
            fscanf(readFile, "%d", &d);
            fscanf(readFile, "%d", &y);
            fscanf(readFile, "%d", &numQueries);

            //creates a node. My list head changes from here
            newNode = createNode(fName, lName, m, d, y);
            //to here. So I'm pretty sure it's changing within this function. Just not sure why.
            head = insertNode(head, newNode);
}
4

0 に答える 0