叶落了 发表于 2023-6-9 21:25:44

怎么简单一点,不用那个 是否继续填写

本帖最后由 叶落了 于 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);
void print(struct Things *a);

struct Things
{
        char date;
        char effort;
        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)
{
        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;
       
        printf("====录入功能测试====\n");
        input(things);
        putchar('\n');
       
        printf("====查找功能测试====\n");
        printf("请输入日期:");
        scanf("%s",date);
        getchar();
        lookfor(things,date);
       
        printf("====打印功能测试====\n");
        {
                print(things);
        }
       
       
        return 0;
}

isdkz 发表于 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);
void print(struct Things *a);

struct Things
{
      char date;
      char effort;
      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)
{
      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;
      
      printf("====录入功能测试====\n");
      input(things);
      putchar('\n');
      
      printf("====查找功能测试====\n");
      printf("请输入日期:");
      scanf("%s",date);
      getchar();
      lookfor(things,date);
      
      printf("====打印功能测试====\n");
      {
                print(things);
      }
      
      return 0;
}

这段代码将会创建一个事件,然后直接结束。如果你希望循环创建事件,可以考虑添加一个循环结构,例如 while 或 for 循环。

sfqxx 发表于 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);
void print(struct Things *a);

struct Things
{
    char date;
    char effort;
    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)
{
    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;

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

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

    printf("====打印功能测试====\n");
    {
      print(things);
    }
    return 0;
}
页: [1]
查看完整版本: 怎么简单一点,不用那个 是否继续填写