鱼C论坛

 找回密码
 立即注册
查看: 563|回复: 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 退出循环即可。下面是修改后的代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

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

  8. struct Things
  9. {
  10.     char date[20];
  11.     char effort[20];
  12.     struct Things *next;
  13. };

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

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

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

  30.         printf("是否继续填写(Y/N):");
  31.         scanf("%c",&i);
  32.         getchar();
  33.     }
  34. }

  35. void lookfor(struct Things *a,char date[20])
  36. {
  37.     if(strcmp(a->date,date)==0)
  38.     {
  39.         printf("已找到该日的事件...\n");
  40.         printf("%s\n",a->date );
  41.         printf("%s\n",a->effort  );
  42.         return;
  43.     }
  44.     else if(a->date!=NULL)
  45.     {
  46.         return lookfor(a->next,date);
  47.     }
  48.     else if(a->date==NULL)
  49.     {
  50.         printf("搜索完毕,无该日日期。\n");
  51.         return;
  52.     }
  53. }

  54. void print(struct Things *a)
  55. {
  56.     if(a==NULL)
  57.     {
  58.         return;
  59.     }
  60.     else
  61.     {
  62.         printf("日期%s\n",a->date );
  63.         printf("事件%s\n",a->effort   );
  64.         return print(a->next);
  65.     }
  66. }
  67. int main(void)
  68. {
  69.     struct Things *things=NULL;
  70.     things=(struct Things *)malloc(sizeof(struct Things));
  71.     char date[20];

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

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

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

使用道具 举报

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

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

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

  8. struct Things
  9. {
  10.         char date[20];
  11.         char effort[20];
  12.         struct Things *next;
  13. };

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

  30. void lookfor(struct Things *a,char date[20])
  31. {
  32.         if(strcmp(a->date,date)==0)
  33.         {
  34.                 printf("已找到该日的事件...\n");
  35.                 printf("%s\n",a->date );
  36.                 printf("%s\n",a->effort  );
  37.                 return;
  38.         }
  39.         else if(a->date!=NULL)
  40.         {
  41.                 return lookfor(a->next,date);
  42.         }
  43.         else if(a->date==NULL)
  44.         {
  45.                 printf("搜索完毕,无该日日期。\n");
  46.                 return;
  47.         }
  48. }

  49. void print(struct Things *a)
  50. {
  51.         if(a==NULL)
  52.         {
  53.                 return;
  54.         }
  55.         else
  56.         {
  57.                 printf("日期%s\n",a->date );
  58.                 printf("事件%s\n",a->effort  );
  59.                 return print(a->next);
  60.         }
  61. }

  62. int main(void)
  63. {
  64.         struct Things *things=NULL;
  65.         things=(struct Things *)malloc(sizeof(struct Things));
  66.         char date[20];
  67.       
  68.         printf("====录入功能测试====\n");
  69.         input(things);
  70.         putchar('\n');
  71.       
  72.         printf("====查找功能测试====\n");
  73.         printf("请输入日期:");
  74.         scanf("%s",date);
  75.         getchar();
  76.         lookfor(things,date);
  77.       
  78.         printf("====打印功能测试====\n");
  79.         {
  80.                 print(things);
  81.         }
  82.       
  83.         return 0;
  84. }
复制代码

这段代码将会创建一个事件,然后直接结束。如果你希望循环创建事件,可以考虑添加一个循环结构,例如 while 或 for 循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

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

  8. struct Things
  9. {
  10.     char date[20];
  11.     char effort[20];
  12.     struct Things *next;
  13. };

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

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

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

  30.         printf("是否继续填写(Y/N):");
  31.         scanf("%c",&i);
  32.         getchar();
  33.     }
  34. }

  35. void lookfor(struct Things *a,char date[20])
  36. {
  37.     if(strcmp(a->date,date)==0)
  38.     {
  39.         printf("已找到该日的事件...\n");
  40.         printf("%s\n",a->date );
  41.         printf("%s\n",a->effort  );
  42.         return;
  43.     }
  44.     else if(a->date!=NULL)
  45.     {
  46.         return lookfor(a->next,date);
  47.     }
  48.     else if(a->date==NULL)
  49.     {
  50.         printf("搜索完毕,无该日日期。\n");
  51.         return;
  52.     }
  53. }

  54. void print(struct Things *a)
  55. {
  56.     if(a==NULL)
  57.     {
  58.         return;
  59.     }
  60.     else
  61.     {
  62.         printf("日期%s\n",a->date );
  63.         printf("事件%s\n",a->effort   );
  64.         return print(a->next);
  65.     }
  66. }
  67. int main(void)
  68. {
  69.     struct Things *things=NULL;
  70.     things=(struct Things *)malloc(sizeof(struct Things));
  71.     char date[20];

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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