鱼C论坛

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

[已解决]怎么简单一点,不用那个 是否继续填写

[复制链接]
发表于 2023-6-9 21:25:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 叶落了 于 2023-6-9 21:31 编辑

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

//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date[20]);
void print(struct Things *a);

struct Things
{
        char date[20];
        char effort[20];
        struct Things *next;
};

void input(struct Things *a)
{
        char i;
        printf("添加记录(Y/N):");
        scanf("%c",&i);
        getchar();
       
        if(i=='Y')
        {
                a->next=NULL;
                a->next=(struct Things *)malloc(sizeof(struct Things));
                printf("日期(yy-mm-dd):");
                scanf("%s",a->date );
                getchar();
               
                printf("事件:");
                scanf("%s",a->effort );
                getchar();
               
                printf("是否继续填写(Y/N):");
                /*分配下一个节点的空间,之所以这样做是因为这个节点已完成赋值了。
                如果直接是return input(a->next);
                我的判断语句只会将一个没有赋值的节点当成最后的最后的节点,然后打印的就是一串乱码
               */
               scanf("%c",&i);
               getchar();
              if(i=='Y')
              {
                      return input(a->next);
              }
              else
             {
                  a->next=NULL;
                  return;
             }
        }
}

void lookfor(struct Things *a,char date[20])
{
        if(strcmp(a->date,date)==0)
        {
                printf("已找到该日的事件...\n");
                printf("%s\n",a->date );
                printf("%s\n",a->effort  );
                return;
        }
        else if(a->date!=NULL)
        {
                return lookfor(a->next,date);
        }
        else if(a->date==NULL)
        {
                printf("搜索完毕,无该日日期。\n");
                return;
        }
}

void print(struct Things *a)
{
        if(a==NULL)
        {
                return;
        }
        else
        {
                printf("日期%s\n",a->date );
                printf("事件%s\n",a->effort  );
                return print(a->next);
        }
}
int main(void)
{
        struct Things *things=NULL;
        things=(struct Things *)malloc(sizeof(struct Things));
        char date[20];
       
        printf("====录入功能测试====\n");
        input(things);
        putchar('\n');
       
        printf("====查找功能测试====\n");
        printf("请输入日期:");
        scanf("%s",date);
        getchar();
        lookfor(things,date);
       
        printf("====打印功能测试====\n");
        {
                print(things);
        }
       
       
        return 0;
}
最佳答案
2023-6-9 22:45:55
可以修改代码,把判断是否继续填写的部分去掉,改成一个死循环,在合适的时候使用 break 退出循环即可。下面是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date[20]);
void print(struct Things *a);

struct Things
{
    char date[20];
    char effort[20];
    struct Things *next;
};

void input(struct Things *a)
{
    char i;
    printf("添加记录(Y/N):");
    scanf("%c",&i);
    getchar();

    while(i == 'Y')
    {
        a->next = NULL;
        a->next = (struct Things *)malloc(sizeof(struct Things));
        printf("日期(yy-mm-dd):");
        scanf("%s",a->date );
        getchar();

        printf("事件:");
        scanf("%s",a->effort );
        getchar();

        printf("是否继续填写(Y/N):");
        scanf("%c",&i);
        getchar();
    }
}

void lookfor(struct Things *a,char date[20])
{
    if(strcmp(a->date,date)==0)
    {
        printf("已找到该日的事件...\n");
        printf("%s\n",a->date );
        printf("%s\n",a->effort  );
        return;
    }
    else if(a->date!=NULL)
    {
        return lookfor(a->next,date);
    }
    else if(a->date==NULL)
    {
        printf("搜索完毕,无该日日期。\n");
        return;
    }
}

void print(struct Things *a)
{
    if(a==NULL)
    {
        return;
    }
    else
    {
        printf("日期%s\n",a->date );
        printf("事件%s\n",a->effort   );
        return print(a->next);
    }
}
int main(void)
{
    struct Things *things=NULL;
    things=(struct Things *)malloc(sizeof(struct Things));
    char date[20];

    printf("====录入功能测试====\n");
    input(things);
    putchar('\n');

    printf("====查找功能测试====\n");
    printf("请输入日期:");
    scanf("%s",date);
    getchar();
    lookfor(things,date);

    printf("====打印功能测试====\n");
    {
        print(things);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-9 21:31:53 | 显示全部楼层
这段代码实现了一个日记记录系统,但每次输入一个新的事件后,都会询问用户是否继续填写。如果你希望简化这个过程,只需要移除相关的询问部分。以下是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date[20]);
void print(struct Things *a);

struct Things
{
        char date[20];
        char effort[20];
        struct Things *next;
};

void input(struct Things *a)
{
        a->next=NULL;
        a->next=(struct Things *)malloc(sizeof(struct Things));
        printf("日期(yy-mm-dd):");
        scanf("%s",a->date );
        getchar();
               
        printf("事件:");
        scanf("%s",a->effort );
        getchar();
               
        //分配下一个节点的空间,之所以这样做是因为这个节点已完成赋值了。
        //我的判断语句只会将一个没有赋值的节点当成最后的最后的节点,然后打印的就是一串乱码
        a->next=NULL;
}

void lookfor(struct Things *a,char date[20])
{
        if(strcmp(a->date,date)==0)
        {
                printf("已找到该日的事件...\n");
                printf("%s\n",a->date );
                printf("%s\n",a->effort  );
                return;
        }
        else if(a->date!=NULL)
        {
                return lookfor(a->next,date);
        }
        else if(a->date==NULL)
        {
                printf("搜索完毕,无该日日期。\n");
                return;
        }
}

void print(struct Things *a)
{
        if(a==NULL)
        {
                return;
        }
        else
        {
                printf("日期%s\n",a->date );
                printf("事件%s\n",a->effort  );
                return print(a->next);
        }
}

int main(void)
{
        struct Things *things=NULL;
        things=(struct Things *)malloc(sizeof(struct Things));
        char date[20];
       
        printf("====录入功能测试====\n");
        input(things);
        putchar('\n');
       
        printf("====查找功能测试====\n");
        printf("请输入日期:");
        scanf("%s",date);
        getchar();
        lookfor(things,date);
       
        printf("====打印功能测试====\n");
        {
                print(things);
        }
       
        return 0;
}
这段代码将会创建一个事件,然后直接结束。如果你希望循环创建事件,可以考虑添加一个循环结构,例如 while 或 for 循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-9 22:45:55 | 显示全部楼层    本楼为最佳答案   
可以修改代码,把判断是否继续填写的部分去掉,改成一个死循环,在合适的时候使用 break 退出循环即可。下面是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//函数声明
void input(struct Things *a);
void lookfor(struct Things *a,char date[20]);
void print(struct Things *a);

struct Things
{
    char date[20];
    char effort[20];
    struct Things *next;
};

void input(struct Things *a)
{
    char i;
    printf("添加记录(Y/N):");
    scanf("%c",&i);
    getchar();

    while(i == 'Y')
    {
        a->next = NULL;
        a->next = (struct Things *)malloc(sizeof(struct Things));
        printf("日期(yy-mm-dd):");
        scanf("%s",a->date );
        getchar();

        printf("事件:");
        scanf("%s",a->effort );
        getchar();

        printf("是否继续填写(Y/N):");
        scanf("%c",&i);
        getchar();
    }
}

void lookfor(struct Things *a,char date[20])
{
    if(strcmp(a->date,date)==0)
    {
        printf("已找到该日的事件...\n");
        printf("%s\n",a->date );
        printf("%s\n",a->effort  );
        return;
    }
    else if(a->date!=NULL)
    {
        return lookfor(a->next,date);
    }
    else if(a->date==NULL)
    {
        printf("搜索完毕,无该日日期。\n");
        return;
    }
}

void print(struct Things *a)
{
    if(a==NULL)
    {
        return;
    }
    else
    {
        printf("日期%s\n",a->date );
        printf("事件%s\n",a->effort   );
        return print(a->next);
    }
}
int main(void)
{
    struct Things *things=NULL;
    things=(struct Things *)malloc(sizeof(struct Things));
    char date[20];

    printf("====录入功能测试====\n");
    input(things);
    putchar('\n');

    printf("====查找功能测试====\n");
    printf("请输入日期:");
    scanf("%s",date);
    getchar();
    lookfor(things,date);

    printf("====打印功能测试====\n");
    {
        print(things);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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