鱼C论坛

 找回密码
 立即注册
查看: 795|回复: 2

[已解决]c 语言单链表

[复制链接]
发表于 2022-3-12 16:09:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

struct Record
{
        char name[10];
        int age;
        struct Date first;
        struct Date second;
        struct Reocrd* next;
};

void addRecord(struct Record** record);
void getInput(struct Record* record);
void printRecord(struct Record* record);
void releaseRecord(struct Record* record);

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("请输入第一针疫苗的接种日期:");
                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("请输入第二针疫苗的接种日期:");
                        scanf("%d-%d-%d", &record->second.year, &record->second.month, &record->second.day);
                }
                else
                {
                        record->second.year = 0;
                }
        }
        else
        {
                record->first.year = 0;
        }
}

void addRecord(struct Record** record)
{
        struct Record* temp;
        struct Record* pt;

        pt = (struct Record*)malloc(sizeof(struct Record));
        if (pt == NULL)
        {
                printf("内存分配失败!\n");
                exit(1);
        }

        getInput(pt);

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

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

        pt = record;

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

                if (record->first.year == 0)
                {
                        printf("请尽快接种疫苗!\n");
                }
                else
                {
                        printf("第一针疫苗接种日期:%d-%d-%d,", 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);
                        }
                }
        }
}

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

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

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

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

                if (ch == 'Y')
                {
                        addRecord(&record);
                }
                else
                {
                        break;
                }
        }

        printRecord(record);

        releaseRecord(record);

        return 0;
}
最佳答案
2022-3-12 16:24:55
本帖最后由 jackz007 于 2022-3-12 16:36 编辑

将此句
#define _CRT_SECURE_NO_WARNINGS
添加为第一行,可以去掉所有的警告
struct Record
{
        char name[10];
        int age;
        struct Date first;
        struct Date second;
        struct Record * next;  // 这一句有错已经修改  
};

下面是报错提示

下面是报错提示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-12 16:24:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-3-12 16:36 编辑

将此句
#define _CRT_SECURE_NO_WARNINGS
添加为第一行,可以去掉所有的警告
struct Record
{
        char name[10];
        int age;
        struct Date first;
        struct Date second;
        struct Record * next;  // 这一句有错已经修改  
};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-12 16:53:12 | 显示全部楼层
jackz007 发表于 2022-3-12 16:24
将此句

添加为第一行,可以去掉所有的警告

感谢感谢!   怪不得,检查了无数次了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表