鱼C论坛

 找回密码
 立即注册
查看: 1626|回复: 5

[已解决]为什么呀,御坂排查了,就是这一部分,但是不知道哪里错了?看了好多好多遍

[复制链接]
发表于 2022-12-6 12:08:04 | 显示全部楼层 |阅读模式
30鱼币
V70RLDA4B5@NHWU1GN3W%TU.png
#include <stdio.h>
#include <stdlib.h>

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

struct vaccines{
        int age;
        char name[18];
        struct Date date_1;
        struct Date date_2;
        struct vaccines *next;
};

void getInput(struct vaccines *va);//录入数据
void addvaccines(struct vaccines **library);
void printLibrary(struct vaccines *library);//打印整个单链表
void releaseLibrary(struct vaccines *library);//释放内存

void getInput(struct vaccines *va){
        _Bool i, j = 0;

        printf("请输入姓名:");
        scanf("%s", va->name);

        printf("请输入年龄:");
        scanf("%d", &va->age);

        printf("是否接种疫苗?(1/0):");
        scanf("%d", &i);
        va->date_1.yes = i;
        if (i){
                printf("请输入日期(2004-4-2):");
                scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
                printf("是否接种第2针疫苗?(1/0):");
                scanf("%d", &j);
                va->date_2.yes = j;
        }
        else{
                printf("请尽快接种疫苗!\n");
        }
        if (j){
                printf("请输入日期(2004-4-2):");
                scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
        }
        else if (i){
                printf("请尽快接种第二针疫苗!\n");
        }
}

void addvaccines(struct vaccines **library){
        struct vaccines *va;//下一个链的地址
        struct vaccines *temp;

        va = (struct vaccines *)malloc(sizeof(struct vaccines));//申请下一个链的内存
        if (va == NULL){
                printf("内存分配失败了。");
                exit(1);
        }

        getInput(va);

        printf("=======\n");
        if (*library != NULL){
                printf("-------\n");
                temp = *library;
                *library = va;
                va->next = temp;
        }
        else{
                printf("+++++++");
                *library = va;
                va->next = NULL;
        }
        printf("=======\n");
}

void printLibrary(struct vaccines *library){
        struct vaccines *va;
        int count = 1;

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

                if (va->date_1.yes){
                        printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
                }
                else{
                        printf("未接种疫苗!\n\n");
                }

                if (va->date_2.yes){
                        printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
                }
                else if(va->date_1.yes){
                        printf("未接种第二针疫苗!\n\n");
                }

                va = va->next;
                count++;
        }
}

void releaseLibrary(struct vaccines *library){
        struct vaccines *temp;

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

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

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

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

        if (ch == 'Y'){
                printLibrary(library);
        }
        
        releaseLibrary(library);

        return 0;
}
最佳答案
2022-12-6 12:08:05
本帖最后由 jhq999 于 2022-12-6 13:19 编辑

以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
void getInput(struct vaccines *va)
{
    int i, j = 0;///////////////////////_Bool是一个字节

    printf("请输入姓名:");
    scanf("%s", va->name);

    printf("请输入年龄:");
    scanf("%d", &va->age);

    printf("是否接种疫苗?(1/0):");
    scanf("%d", &i);
    va->date_1.yes = i;
    if (i)
    {
        printf("请输入日期(2004-4-2):");
        scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
        printf("是否接种第2针疫苗?(1/0):");
        scanf("%d", &j);/////////////////////////////////////这里把i覆盖成0
        va->date_2.yes = j;
    }
    else
    {
        printf("请尽快接种疫苗!\n");
    }
    if (j)
    {
        printf("请输入日期(2004-4-2):");
        scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
    }
    else if (i)
    {
        printf("请尽快接种第二针疫苗!\n");
    }
}
void printLibrary(struct vaccines *library)
{
    struct vaccines *va;
    int count = 1;

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

        if (va->date_1.yes)
        {
            printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
            if (va->date_2.yes)////////////////////////////////////////////////
            {
                printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
            }
            else if(va->date_1.yes)
            {
                printf("未接种第二针疫苗!\n\n");
            }
        }
        else
        {
            printf("未接种疫苗!\n\n");
        }



        va = va->next;
        count++;
    }
}

最佳答案

查看完整内容

以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 12:08:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-12-6 13:19 编辑

以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
void getInput(struct vaccines *va)
{
    int i, j = 0;///////////////////////_Bool是一个字节

    printf("请输入姓名:");
    scanf("%s", va->name);

    printf("请输入年龄:");
    scanf("%d", &va->age);

    printf("是否接种疫苗?(1/0):");
    scanf("%d", &i);
    va->date_1.yes = i;
    if (i)
    {
        printf("请输入日期(2004-4-2):");
        scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
        printf("是否接种第2针疫苗?(1/0):");
        scanf("%d", &j);/////////////////////////////////////这里把i覆盖成0
        va->date_2.yes = j;
    }
    else
    {
        printf("请尽快接种疫苗!\n");
    }
    if (j)
    {
        printf("请输入日期(2004-4-2):");
        scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
    }
    else if (i)
    {
        printf("请尽快接种第二针疫苗!\n");
    }
}
void printLibrary(struct vaccines *library)
{
    struct vaccines *va;
    int count = 1;

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

        if (va->date_1.yes)
        {
            printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
            if (va->date_2.yes)////////////////////////////////////////////////
            {
                printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
            }
            else if(va->date_1.yes)
            {
                printf("未接种第二针疫苗!\n\n");
            }
        }
        else
        {
            printf("未接种疫苗!\n\n");
        }



        va = va->next;
        count++;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-6 12:09:05 | 显示全部楼层
图片错了 3W1R$PID~1_SLSY~)[4LZP7.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-6 14:17:14 | 显示全部楼层
jhq999 发表于 2022-12-6 13:13
以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?

图片里不是有表示吗?2排空格中间,不知道为什么,段错误了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-6 14:27:24 | 显示全部楼层
jhq999 发表于 2022-12-6 12:08
以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?

谢谢,刚刚把_Bool改为char就没问题了。为什么不可以使用_Bool啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 15:26:45 | 显示全部楼层
本帖最后由 jhq999 于 2022-12-6 15:29 编辑
御坂19090 发表于 2022-12-6 14:27
谢谢,刚刚把_Bool改为char就没问题了。为什么不可以使用_Bool啊?


scanf("%d"....//是输入4个字节,_Bool只有一个字节,在声明i,j时,它们挨在一起,本来i=1,在输入j时,把j后面的三个字节赋值成0,i就在后面3个字节之中。
还有我是在j输入0时发现不输出“请尽快接种第二针疫苗”才发现你声明成_Bool的错误
还有建议你改成int如果你输入的格式是“%d"的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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