liyifeng295641 发表于 2024-4-15 17:26:21

C语言单链表01

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

struct Date
{
        int year;
        int month;
        int day;
};

struct Record
{
        char name;       
        int age;
        struct Date first;       
        struct Date second;
        struct Record *next;
};

void getInput(struct Record *record)
{
        char ch;

        printf("请输入姓名:");
        scanf("%s", record->name);
        printf("请输入年龄:");
        scanf("%d", &record->age);
        printf("请问是否接种过疫苗(Y/N):");
        do
        {
                ch = getchar();
        }while(ch != 'Y' || ch != 'N');
        if(ch != 'Y')
        {
                record->first.year = 0;
                printf("请尽快接种疫苗!");
        }
        else
        {
                printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
                scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);
                printf("请问是否接种第二针疫苗(Y/N):");
                do
                {
                        ch = getchar();
                }while(ch != 'Y' || ch != 'N');
                if(ch != 'Y')
                {
                        record->second.year = 0;
                        printf("请尽快接种第二针疫苗!");
                }
                else
                {
                        printf("请输入第二针疫苗接种日期(yyyy-mm-dd):");
                        scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
                }
        }
}

void addRecord(struct Record **library)
{
        struct Record *record, *temp;
        record = (struct Record *)malloc(sizeof(struct Record));
        if(record != NULL)
        {
                printf("内存分配失败!");
                exit(1);
        }

        getInput(record);

        if(*library != NULL)
        {
                temp = *library;
                *library = record;
                record->next = temp;
        }
        else
        {
                *library = record;
                record->next = NULL;
        }
}

void printRecord(struct Record *library)
{
        struct Record *record;
        while(record != NULL)
        {
                printf("姓名是:%s\n", record->name);
                printf("年龄是:%d\n", record->age);
                if(record->first.year == 0)
                {
                        printf("未接种疫苗!\n");
                }
                else
                {
                        printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
                }

                if(record->first.year != 0 && record->second.year == 0)
                {
                        printf("未接种第二针疫苗!\n");
                }else if(record->second.year != 0)
                {
                        printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
                }
                record = record->next;
        }
}

void releaseRecord(struct Record **library)
{
        struct Record *temp;
        while(*library != NULL)
        {
                temp = *library;
                *library = temp->next;
                free(temp);
        }
}

int main(void)
{
        struct Record *library;
        char ch;
       
        while(1)
        {
                printf("请问是否需要录入(Y/N):");
                do
                {
                        ch = getchar();
                }while(ch != 'Y' || ch != 'N');
                if(ch == 'Y')
                {
                        addRecord(&library);       
                }
                else
                {
                        exit(1);
                }
        }
        printf("请问是否需要录入(Y/N):");
        do
        {
                ch = getchar();
        }while(ch != 'Y' || ch != 'N');

        if(ch == 'Y')
        {
                printRecord(library);
        }

        releaseRecord(&library);
       
        return 0;
}




@FishC,帮我看下我的代码有什么bug吗?
为什么执行不起来!

FishC 发表于 2024-4-15 17:27:04

你的代码有几个小问题:

1. 在结构体Record中,name应该是一个字符串类型char name,而不是单个字符char name。

2. 在getInput函数中,接收字符串输入时应该使用%s,而不是%s。

3. 在getInput函数中,在接收Y/N选项时,while循环的条件写错了。应该是ch != 'Y' && ch != 'N',而不是ch != 'Y' || ch != 'N',因为只要ch不等于Y或者不等于N,循环就会一直执行。

4. 在printRecord函数中,定义了record指针却没有为其赋初值,导致循环无法正确执行。你需要在循环开始之前,将record指针指向library。

5. 在main函数中,调用addRecord函数之前应该先初始化library指针为NULL,否则会出现未定义行为。

6. 在main函数中,检查是否需要录入的循环中,while循环的条件判断也写错了,应该是ch != 'Y' && ch != 'N',而不是ch != 'Y' || ch != 'N'。

正确的代码如下所示:

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

struct Date
{
    int year;
    int month;
    int day;
};

struct Record
{
    char name;
    int age;
    struct Date first;
    struct Date second;
    struct Record *next;
};

void getInput(struct Record *record)
{
    char ch;

    printf("请输入姓名:");
    scanf("%s", record->name);
    printf("请输入年龄:");
    scanf("%d", &record->age);
    printf("请问是否接种过疫苗(Y/N):");
    do
    {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch != 'Y')
    {
      record->first.year = 0;
      printf("请尽快接种疫苗!\n");
    }
    else
    {
      printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
      scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);
      printf("请问是否接种第二针疫苗(Y/N):");
      do
      {
            ch = getchar();
      } while (ch != 'Y' && ch != 'N');
      if (ch != 'Y')
      {
            record->second.year = 0;
            printf("请尽快接种第二针疫苗!\n");
      }
      else
      {
            printf("请输入第二针疫苗接种日期(yyyy-mm-dd):");
            scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
      }
    }
}

void addRecord(struct Record **library)
{
    struct Record *record, *temp;
    record = (struct Record *)malloc(sizeof(struct Record));
    if (record == NULL)
    {
      printf("内存分配失败!\n");
      exit(1);
    }

    getInput(record);

    if (*library != NULL)
    {
      temp = *library;
      *library = record;
      record->next = temp;
    }
    else
    {
      *library = record;
      record->next = NULL;
    }
}

void printRecord(struct Record *library)
{
    struct Record *record = library;
    while (record != NULL)
    {
      printf("姓名是:%s\n", record->name);
      printf("年龄是:%d\n", record->age);
      if (record->first.year == 0)
      {
            printf("未接种疫苗!\n");
      }
      else
      {
            printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
      }

      if (record->first.year != 0 && record->second.year == 0)
      {
            printf("未接种第二针疫苗!\n");
      }
      else if (record->second.year != 0)
      {
            printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
      }
      record = record->next;
    }
}

void releaseRecord(struct Record **library)
{
    struct Record *temp;
    while (*library != NULL)
    {
      temp = *library;
      *library = temp->next;
      free(temp);
    }
}

int main(void)
{
    struct Record *library = NULL;
    char ch;

    while (1)
    {
      printf("请问是否需要录入(Y/N):");
      do
      {
            ch = getchar();
      } while (ch != 'Y' && ch != 'N');
      if (ch == 'Y')
      {
            addRecord(&library);
      }
      else
      {
            break;
      }
    }

    printf("请问是否需要打印录入信息(Y/N):");
    do
    {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');

    if (ch == 'Y')
    {
      printRecord(library);
    }

    releaseRecord(&library);

    return 0;
}

希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-4-15 17:39:06

FishC 发表于 2024-4-15 17:27
你的代码有几个小问题:

1. 在结构体Record中,name应该是一个字符串类型char name,而不是单个字 ...

在这段代码中print Record并没有调用成功。

FishC 发表于 2024-4-15 17:39:16

liyifeng295641 发表于 2024-04-15 17:39
在这段代码中print Record并没有调用成功。

非常抱歉,我犯了一个错误。在printRecord函数中,应该把struct Record *record = library;的声明放在while循环之前,以便正确初始化record指针。请修改printRecord函数如下:

void printRecord(struct Record *library){
    struct Record *record = library;
    while (record != NULL) {
      printf("姓名是:%s\n", record->name);
      printf("年龄是:%d\n", record->age);
      if (record->first.year == 0) {
            printf("未接种疫苗!\n");
      }
      else {
            printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
      }
      if (record->second.year == 0) {
            printf("未接种第二针疫苗!\n");
      } else {
            printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
      }
      record = record->next;
    }
}

这样应该就可以正确打印录入的信息了。请再次尝试运行代码。如果还有其他问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-4-15 17:42:31

FishC 发表于 2024-4-15 17:39
非常抱歉,我犯了一个错误。在printRecord函数中,应该把struct Record *record = library;的声明放在w ...

请问是否需要录入(Y/N):Y
请输入姓名:小甲鱼
请输入年龄:21
请问是否接种过疫苗(Y/N):N
请尽快接种疫苗!请问是否需要录入(Y/N):N
请问是否需要打印(Y/N):Y


然后没有打印结果。

FishC 发表于 2024-4-15 17:43:03

liyifeng295641 发表于 2024-04-15 17:42
请问是否需要录入(Y/N):Y
请输入姓名:chenxing
请输 ...

非常抱歉给你带来的困扰。在你的代码中,printRecord函数中的record指针没有初始化为library,导致循环无法正常执行。请将printRecord函数修改如下:void printRecord(struct Record *library){    struct Record *record = library;    while (record != NULL) {      printf("姓名是:%s\n", record->name);      printf("年龄是:%d\n", record->age);      if (record->first.year == 0) {            printf("未接种疫苗!\n");      }      else {            printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);      }      if (record->second.year == 0) {            printf("未接种第二针疫苗!\n");      } else {            printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);      }      record = record->next;    }}同时,main函数中需要增加一个确认是否打印的判断语句,才能正确调用printRecord函数。请将main函数修改如下:int main(void){    struct Record *library = NULL;    char ch;    while (1) {      printf("请问是否需要录入(Y/N):");      do {            ch = getchar();      } while (ch != 'Y' && ch != 'N');      if (ch == 'Y') {            addRecord(&library);      } else {            break;      }    }    printf("请问是否需要打印(Y/N):");    do {      ch = getchar();    } while (ch != 'Y' && ch != 'N');    if (ch == 'Y') {      printRecord(library);    }    releaseRecord(&library);    return 0;}请再次尝试运行代码。如果还有其他问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-4-15 17:43:47

FishC 发表于 2024-4-15 17:43
非常抱歉给你带来的困扰。在你的代码中,printRecord函数中的record指针没有初始化为library,导致循环 ...

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

struct Date
{
        int year;
        int month;
        int day;
};

struct Record
{
        char name;       
        int age;
        struct Date first;       
        struct Date second;
        struct Record *next;
};

void getInput(struct Record *record)
{
        char ch;

        printf("请输入姓名:");
        scanf("%s", record->name);
        printf("请输入年龄:");
        scanf("%d", &record->age);
        printf("请问是否接种过疫苗(Y/N):");
        do
        {
                ch = getchar();
        }while(ch != 'Y' && ch != 'N');
        if(ch != 'Y')
        {
                record->first.year = 0;
                printf("请尽快接种疫苗!");
        }
        else
        {
                printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
                scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);
                printf("请问是否接种第二针疫苗(Y/N):");
                do
                {
                        ch = getchar();
                }while(ch != 'Y' && ch != 'N');
                if(ch != 'Y')
                {
                        record->second.year = 0;
                        printf("请尽快接种第二针疫苗!");
                }
                else
                {
                        printf("请输入第二针疫苗接种日期(yyyy-mm-dd):");
                        scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
                }
        }
}

void addRecord(struct Record **library)
{
        struct Record *record, *temp;
        record = (struct Record *)malloc(sizeof(struct Record));
        if(record == NULL)
        {
                printf("内存分配失败!");
                exit(1);
        }

        getInput(record);

        if(*library != NULL)
        {
                temp = *library;
                *library = record;
                record->next = temp;
        }
        else
        {
                *library = record;
                record->next = NULL;
        }
}

void printRecord(struct Record *library)
{
        struct Record *record = library;
        while(record != NULL)
        {
                printf("姓名是:%s\n", record->name);
                printf("年龄是:%d\n", record->age);
                if(record->first.year == 0)
                {
                        printf("未接种疫苗!\n");
                }
                else
                {
                        printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
                }

                if(record->first.year != 0 && record->second.year == 0)
                {
                        printf("未接种第二针疫苗!\n");
                }else if(record->second.year != 0)
                {
                        printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
                }
                record = record->next;
        }
}

void releaseRecord(struct Record **library)
{
        struct Record *temp;
        while(*library != NULL)
        {
                temp = *library;
                *library = temp->next;
                free(temp);
        }
}

int main(void)
{
        struct Record *library = NULL;
        char ch;
       
        while(1)
        {
                printf("请问是否需要录入(Y/N):");
                do
                {
                        ch = getchar();
                }while(ch != 'Y' && ch != 'N');
                if(ch == 'Y')
                {
                        addRecord(&library);       
                }
                else
                {
                        break;
                }
        }
        printf("请问是否需要打印(Y/N):");
        do
        {
                ch = getchar();
        }while(ch != 'Y' || ch != 'N');

        if(ch == 'Y')
        {
                printRecord(library);
        }

        releaseRecord(&library);
       
        return 0;
}

liyifeng295641 发表于 2024-4-15 17:44:18

FishC 发表于 2024-4-15 17:43
非常抱歉给你带来的困扰。在你的代码中,printRecord函数中的record指针没有初始化为library,导致循环 ...

printRecord()函数有问题吗?

FishC 发表于 2024-4-15 17:45:29

liyifeng295641 发表于 2024-04-15 17:43
#include
#include

struct Date
{
        int year; ...

你的代码基本上没有问题了,只有一处小错误需要修改。在main函数中,检查是否需要打印的循环中,while循环的条件判断写错了,应该是ch != 'Y' && ch != 'N',而不是ch != 'Y' || ch != 'N',因为只要ch不等于Y并且不等于N,循环就会一直执行。请将代码修改如下:

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

struct Date{
    int year;
    int month;
    int day;
};

struct Record{
    char name;
    int age;
    struct Date first;
    struct Date second;
    struct Record *next;
};

void getInput(struct Record *record){
    char ch;
    printf("请输入姓名:");
    scanf("%s", record->name);
    printf("请输入年龄:");
    scanf("%d", &record->age);
    printf("请问是否接种过疫苗(Y/N):");
    do{
      ch = getchar();
    }while(ch != 'Y' && ch != 'N');
    if(ch != 'Y'){
      record->first.year = 0;
      printf("请尽快接种疫苗!\n");
    }
    else{
      printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
      scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);
      printf("请问是否接种第二针疫苗(Y/N):");
      do{
            ch = getchar();
      }while(ch != 'Y' && ch != 'N');
      if(ch != 'Y'){
            record->second.year = 0;
            printf("请尽快接种第二针疫苗!\n");
      }
      else{
            printf("请输入第二针疫苗接种日期(yyyy-mm-dd):");
            scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
      }
    }
}

void addRecord(struct Record **library){
    struct Record *record, *temp;
    record = (struct Record *)malloc(sizeof(struct Record));
    if(record == NULL){
      printf("内存分配失败!\n");
      exit(1);
    }
    getInput(record);
    if(*library != NULL){
      temp = *library;
      *library = record;
      record->next = temp;
    }
    else{
      *library = record;
      record->next = NULL;
    }
}

void printRecord(struct Record *library){
    struct Record *record = library;
    while(record != NULL){
      printf("姓名是:%s\n", record->name);
      printf("年龄是:%d\n", record->age);
      if(record->first.year == 0){
            printf("未接种疫苗!\n");
      }
      else{
            printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
      }
      if(record->first.year != 0 && record->second.year == 0){
            printf("未接种第二针疫苗!\n");
      }
      else if(record->second.year != 0){
            printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
      }
      record = record->next;
    }
}

void releaseRecord(struct Record **library){
    struct Record *temp;
    while(*library != NULL){
      temp = *library;
      *library = temp->next;
      free(temp);
    }
}

int main(void){
    struct Record *library = NULL;
    char ch;
    while(1){
      printf("请问是否需要录入(Y/N):");
      do{
            ch = getchar();
      }while(ch != 'Y' && ch != 'N');
      if(ch == 'Y'){
            addRecord(&library);
      }
      else{
            break;
      }
    }
    printf("请问是否需要打印(Y/N):");
    do{
      ch = getchar();
    }while(ch != 'Y' && ch != 'N');
    if(ch == 'Y'){
      printRecord(library);
    }
    releaseRecord(&library);
    return 0;
}

希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 2024-4-15 17:48:00

liyifeng295641 发表于 2024-04-15 17:44
printRecord()函数有问题吗?

非常抱歉,我犯了一个错误。在printRecord函数中,如果第一针疫苗接种了但第二针疫苗未接种,应该打印"未接种第二针疫苗!"。修改printRecord函数如下所示:void printRecord(struct Record *library){    struct Record *record = library;    while (record != NULL) {      printf("姓名是:%s\n", record->name);      printf("年龄是:%d\n", record->age);      if (record->first.year == 0) {            printf("未接种疫苗!\n");      }      else {            printf("第一针接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);      }      if (record->second.year == 0) {            printf("未接种第二针疫苗!\n");      }      else {            printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);      }      record = record->next;    }}请尝试运行修改后的代码,应该能正常打印录入信息。如果还有其他问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-4-16 16:30:36

FishC 发表于 2024-4-15 17:48
非常抱歉,我犯了一个错误。在printRecord函数中,如果第一针疫苗接种了但第二针疫苗未接种,应该打印" ...

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

struct Date
{
        int year;
        int month;
        int day;
};


struct Record
{
        char name;
        int age;
        struct Date first;
        struct Date second;
        struct Record *next;
};

void getInput(struct Record *record)
{
        char ch;
        printf("请问姓名是:");
        scanf("%s", record->name);
        printf("请问年龄是:");
        scanf("%d", &record->age);
        printf("请问是否接种过疫苗(Y/N):");
        do
        {
                ch = getchar();
        }while(ch != 'Y' && ch != 'N');

        if(ch == 'Y')
        {
                printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
                scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);
                printf("请问是否接种过第二针疫苗(Y/N):");
                do
                {
                        ch = getchar();
                }while(ch != 'Y' && ch != 'N');

                if(ch == 'Y')
                {
                        printf("请输入第二针疫苗接种的日期(yyyy-mm-dd):");
                        scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
                }
                else
                {
                        record->second.year = 0;
                        printf("请尽快接种第二针疫苗!");
                }
        }
        else
        {
                record->first.year = 0;
                printf("请尽快接种疫苗!");
        }
        putchar('\n');
}


void addRecord(struct Record **head)
{
        struct Record *record , *temp;

        record = (struct Record *)malloc(sizeof(struct Record));

        if(record == NULL)
        {
                printf("内存分配失败!");
                exit(1);
        }
       
        getInput(record);

        if(record != NULL)
        {
                temp = *head;
                *head = record;
                record -> next = temp;
        }
        else
        {
                *head = record;
                record -> next = NULL;
        }
}

void printRecord(struct Record *head)
{
        struct Record *record;

        record = head;

        while(record != NULL)
        {
                printf("姓名:%s, 年龄:%d\n", record->name, record->age);

                if(record->first.year != 0)
                {
                        printf("第一针疫苗的接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
                       
                        if(record->second.year != 0 && record->first.year != 0)
                        {
                                printf("第二针疫苗的接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
                        }
                        else if(record->first.year != 0 && record->second.year == 0)
                        {
                                printf("未接种第二针疫苗!\n");
                        }
                }
                else
                {
                        printf("未接种疫苗!\n");
                }
                record = record -> next;
        }
}

void releaseRecord(struct Record *head)
{
        struct Record *temp;

        while(head != NULL)
        {
                temp = head;
                head = head->next;
                free(temp);
        }
}

int main(void)
{
        struct Record *head;
        char ch;

        while(1)
        {
                printf("请问是否需要录入(Y/N):");

                do
                {
                        ch = getchar();
                }while(ch != 'Y' && ch != 'N');
               
                if(ch == 'Y')
                {
                        addRecord(&head);
                }
                else
                {
                        break;
                }
        }
       
        printRecord(head);

        releaseRecord(head);

        return 0;
}


@FishC,帮我找下bug

FishC 发表于 2024-4-16 16:37:24

liyifeng295641 发表于 2024-04-16 16:30
#include
#include

struct Date
{
        int year; ...

你的代码有一些小问题,我帮你修改了一下,请看下面的代码:#include #include struct Date{    int year;    int month;    int day;};struct Record{    char name;    int age;    struct Date first;    struct Date second;    struct Record *next;};void getInput(struct Record *record){    char ch;    printf("请问姓名是:");    scanf("%s", record->name);    printf("请问年龄是:");    scanf("%d", &record->age);    printf("请问是否接种过疫苗(Y/N):");    do    {      ch = getchar();    } while (ch != 'Y' && ch != 'N');    if (ch == 'Y')    {      printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");      scanf("%d-%d-%d", &record->first.year, &record->first.month, &record->first.day);      printf("请问是否接种过第二针疫苗(Y/N):");      do      {            ch = getchar();      } while (ch != 'Y' && ch != 'N');      if (ch == 'Y')      {            printf("请输入第二针疫苗接种的日期(yyyy-mm-dd):");            scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);      }      else      {            record->second.year = 0;            printf("请尽快接种第二针疫苗!");      }    }    else    {      record->first.year = 0;      printf("请尽快接种疫苗!");    }    putchar('\n');}void addRecord(struct Record **head){    struct Record *record, *temp;    record = (struct Record *)malloc(sizeof(struct Record));    if (record == NULL)    {      printf("内存分配失败!");      exit(1);    }    getInput(record);    if (*head != NULL)    {      temp = *head;      *head = record;      record->next = temp;    }    else    {      *head = record;      record->next = NULL;    }}void printRecord(struct Record *head){    struct Record *record;    record = head;    while (record != NULL)    {      printf("姓名:%s, 年龄:%d\n", record->name, record->age);      if (record->first.year != 0)      {            printf("第一针疫苗的接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);            if (record->second.year != 0 && record->first.year != 0)            {                printf("第二针疫苗的接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);            }            else if (record->second.year == 0 && record->first.year != 0)            {                printf("未接种第二针疫苗!\n");            }      }      else      {            printf("未接种疫苗!\n");      }      record = record->next;    }}void releaseRecord(struct Record *head){    struct Record *temp;    while (head != NULL)    {      temp = head;      head = head->next;      free(temp);    }}int main(void){    struct Record *head = NULL;    char ch;    while (1)    {      printf("请问是否需要录入(Y/N):");      do      {            ch = getchar();      } while (ch != 'Y' && ch != 'N');      if (ch == 'Y')      {            addRecord(&head);      }      else      {            break;      }    }    printRecord(head);    releaseRecord(head);    return 0;}主要修改的地方有以下几点:1. 在结构体Record中,name应该是一个字符串类型char name,而不是单个字符char name。2. 在getInput函数中,接收字符串输入时应该使用%s,而不是%s。3. 在printRecord函数中,判断是否接种第二针疫苗时,应该是record->second.year == 0,而不是record->first.year == 0。4. 在main函数中,调用addRecord函数之前应该先初始化head指针为NULL,否则会出现未定义行为。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言单链表01