0

我正在尝试创建一个包含姓名和出生日期信息的人员链接列表。人员信息在结构中声明,当我创建一个新节点时,该新节点稍后会添加到列表的末尾。发生的事情是,我的 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