鱼C论坛

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

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

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

  3. struct Date{
  4.         int year;
  5.         int month;
  6.         int day;
  7.         _Bool yes;
  8. };

  9. struct vaccines{
  10.         int age;
  11.         char name[18];
  12.         struct Date date_1;
  13.         struct Date date_2;
  14.         struct vaccines *next;
  15. };

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

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

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

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

  26.         printf("是否接种疫苗?(1/0):");
  27.         scanf("%d", &i);
  28.         va->date_1.yes = i;
  29.         if (i){
  30.                 printf("请输入日期(2004-4-2):");
  31.                 scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
  32.                 printf("是否接种第2针疫苗?(1/0):");
  33.                 scanf("%d", &j);
  34.                 va->date_2.yes = j;
  35.         }
  36.         else{
  37.                 printf("请尽快接种疫苗!\n");
  38.         }
  39.         if (j){
  40.                 printf("请输入日期(2004-4-2):");
  41.                 scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
  42.         }
  43.         else if (i){
  44.                 printf("请尽快接种第二针疫苗!\n");
  45.         }
  46. }

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

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

  55.         getInput(va);

  56.         printf("=======\n");
  57.         if (*library != NULL){
  58.                 printf("-------\n");
  59.                 temp = *library;
  60.                 *library = va;
  61.                 va->next = temp;
  62.         }
  63.         else{
  64.                 printf("+++++++");
  65.                 *library = va;
  66.                 va->next = NULL;
  67.         }
  68.         printf("=======\n");
  69. }

  70. void printLibrary(struct vaccines *library){
  71.         struct vaccines *va;
  72.         int count = 1;

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

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

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

  89.                 va = va->next;
  90.                 count++;
  91.         }
  92. }

  93. void releaseLibrary(struct vaccines *library){
  94.         struct vaccines *temp;

  95.         while (library != NULL){
  96.                 temp = library;
  97.                 library = library->next;
  98.                 free(temp);
  99.         }
  100. }

  101. int main(){
  102.         struct vaccines *library = NULL;
  103.         char ch;

  104.         while (1){
  105.                 printf("请问是否需要录入信息(Y/N):");
  106.                 do{
  107.                         ch = getchar();
  108.                 }while (ch != 'Y' && ch != 'N');
  109.        
  110.                 if (ch == 'Y'){
  111.                         addvaccines(&library);
  112.                         printf("--------\n");
  113.                 }
  114.                 else{
  115.                         break;
  116.                 }
  117.         }

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

  122.         if (ch == 'Y'){
  123.                 printLibrary(library);
  124.         }
  125.        
  126.         releaseLibrary(library);

  127.         return 0;
  128. }
复制代码
最佳答案
2022-12-6 12:08:05
本帖最后由 jhq999 于 2022-12-6 13:19 编辑

以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?

  1. void getInput(struct vaccines *va)
  2. {
  3.     int i, j = 0;///////////////////////_Bool是一个字节

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

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

  8.     printf("是否接种疫苗?(1/0):");
  9.     scanf("%d", &i);
  10.     va->date_1.yes = i;
  11.     if (i)
  12.     {
  13.         printf("请输入日期(2004-4-2):");
  14.         scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
  15.         printf("是否接种第2针疫苗?(1/0):");
  16.         scanf("%d", &j);/////////////////////////////////////这里把i覆盖成0
  17.         va->date_2.yes = j;
  18.     }
  19.     else
  20.     {
  21.         printf("请尽快接种疫苗!\n");
  22.     }
  23.     if (j)
  24.     {
  25.         printf("请输入日期(2004-4-2):");
  26.         scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
  27.     }
  28.     else if (i)
  29.     {
  30.         printf("请尽快接种第二针疫苗!\n");
  31.     }
  32. }
  33. void printLibrary(struct vaccines *library)
  34. {
  35.     struct vaccines *va;
  36.     int count = 1;

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

  42.         if (va->date_1.yes)
  43.         {
  44.             printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
  45.             if (va->date_2.yes)////////////////////////////////////////////////
  46.             {
  47.                 printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
  48.             }
  49.             else if(va->date_1.yes)
  50.             {
  51.                 printf("未接种第二针疫苗!\n\n");
  52.             }
  53.         }
  54.         else
  55.         {
  56.             printf("未接种疫苗!\n\n");
  57.         }



  58.         va = va->next;
  59.         count++;
  60.     }
  61. }
复制代码

最佳答案

查看完整内容

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

使用道具 举报

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

以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?

  1. void getInput(struct vaccines *va)
  2. {
  3.     int i, j = 0;///////////////////////_Bool是一个字节

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

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

  8.     printf("是否接种疫苗?(1/0):");
  9.     scanf("%d", &i);
  10.     va->date_1.yes = i;
  11.     if (i)
  12.     {
  13.         printf("请输入日期(2004-4-2):");
  14.         scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
  15.         printf("是否接种第2针疫苗?(1/0):");
  16.         scanf("%d", &j);/////////////////////////////////////这里把i覆盖成0
  17.         va->date_2.yes = j;
  18.     }
  19.     else
  20.     {
  21.         printf("请尽快接种疫苗!\n");
  22.     }
  23.     if (j)
  24.     {
  25.         printf("请输入日期(2004-4-2):");
  26.         scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
  27.     }
  28.     else if (i)
  29.     {
  30.         printf("请尽快接种第二针疫苗!\n");
  31.     }
  32. }
  33. void printLibrary(struct vaccines *library)
  34. {
  35.     struct vaccines *va;
  36.     int count = 1;

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

  42.         if (va->date_1.yes)
  43.         {
  44.             printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
  45.             if (va->date_2.yes)////////////////////////////////////////////////
  46.             {
  47.                 printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
  48.             }
  49.             else if(va->date_1.yes)
  50.             {
  51.                 printf("未接种第二针疫苗!\n\n");
  52.             }
  53.         }
  54.         else
  55.         {
  56.             printf("未接种疫苗!\n\n");
  57.         }



  58.         va = va->next;
  59.         count++;
  60.     }
  61. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-6 12:09:05 | 显示全部楼层
图片错了 3W1R$PID~1_SLSY~)[4LZP7.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

图片里不是有表示吗?2排空格中间,不知道为什么,段错误了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谢谢,刚刚把_Bool改为char就没问题了。为什么不可以使用_Bool啊?
小甲鱼最新课程 -> https://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"的话
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 01:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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