鱼C论坛

 找回密码
 立即注册
查看: 1219|回复: 4

[已解决]单链表头插法作业

[复制链接]
发表于 2024-5-27 16:45:13 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>

  2. #include <stdlib.h>



  3. struct Date

  4. {

  5.         int year;

  6.         int month;

  7.         int day;       

  8. };



  9. struct Record

  10. {

  11.         char name[16];

  12.         int age;

  13.         struct Date first;

  14.         struct Date second;

  15.         struct Recond *next;

  16. };



  17. void getInput(struct Recond *recond);

  18. void printRecond (struct Recond *head);

  19. void addRecond (struct Recond **head);

  20. void releaseRecond (struct Recond *head);



  21. void getInput(struct Recond *recond){

  22.         printf("请问名字是:");

  23.         scanf("%s",recond->name);

  24.         printf("请问年龄是:");

  25.         scanf("%d",&recond->age);

  26.         printf("请问是否接种过疫苗:(Y/N)");

  27.         getchar();

  28.         if(getchar() != 'Y')

  29.         {

  30.                 recond->first.year = 0;

  31.                 printf("请尽快接种疫苗!\n");

  32.         }else{

  33.                 printf("请输入第一针接种的日期(yyyy-mm-dd):");

  34.                 scanf("%d-%d-%d",&recond->first.year,&recond->first.month,&recond->first.day);

  35.                 printf("是否接种第二针疫苗:(Y/N)");

  36.                 getchar();

  37.                 if (getchar() != 'Y')

  38.                 {

  39.                         recond->second = 0;

  40.                         printf("请尽快接种第二针疫苗!\n");

  41.                 }else{

  42.                         printf("请输入接种第二针的日期(YYYY-MM-DD):");

  43.                         scanf("%d-%d-%d",&recond->second.year,&recond.second.month,&recond->second.day);

  44.                 };

  45.         }

  46.         putchar('\n');       

  47. }



  48. void printRecond(struct Recond *head)

  49. {

  50.         struct Recond *recond;



  51.         recond = head;



  52.         while(recond != NULL)

  53.         {

  54.                 printf("姓名:%s,年龄:%d\n,"(*record).name,(*record).age);

  55.                 if(record->first.year == 0)       

  56.                 {

  57.                         printf("未接种疫苗!\n\n");       

  58.                 }else{

  59.                         printf("第一针疫苗接种日期:%d-%d-%d",record->second.year,record->second.month,record->second.day);       

  60.                 }

  61.                 if(record->first.year != 0 && record->second.year ==0)

  62.                 {

  63.                         printf("未接种第二针疫苗!\n\n");

  64.                 }else if(record->first.year !=0)

  65.                 {

  66.                         printf("第二针接种日期:%d-%d-%d",record->second.year,record->second.month,record->second.day);       

  67.                 }

  68.                 record = record ->next;

  69.         }

  70. }



  71. void addRecord(struct Record **head)

  72. {

  73.         struct Record *record,*temp;

  74.        

  75.         record = (struct Record *)malloc(sizeof(struct Record));

  76.        

  77.         if(record == NULL)

  78.         {

  79.                 printf("内存分配失败!\n");

  80.                 exit(1);       

  81.         }

  82.         getInput(record);

  83.         if (*head != NULL)

  84.         {

  85.                 temp = *head;

  86.                 *head = record;       

  87.                 record ->next = temp;

  88.         }else{

  89.                 *head = record;

  90.                 record->next = NULL;        

  91.         }

  92. }



  93. void releaseRecord(struct Record *head)

  94. {

  95.         struct Record *temp;



  96.         while (head != NULL)

  97.         {

  98.                 temp = head;       

  99.                 head = head->next;

  100.                 free(temp);

  101.         }       

  102. }



  103. int main(void)

  104. {

  105.         struct Record *head = NULL;

  106.         int ch;

  107.        

  108.         while(1)

  109.         {

  110.                 printf("请问是否需要录入:(Y/N):");

  111.                 do

  112.                 {

  113.                         ch = getchar();

  114.                 }while(ch != 'Y'&& ch != 'N');

  115.                

  116.                 if(ch == 'Y')

  117.                 {

  118.                         addRecord(&head);

  119.                 }else{

  120.                         break;       

  121.                 }

  122.         }

  123.        

  124.         printf("请问是否需要打印已录入数据(Y/N):");

  125.         do

  126.         {

  127.                 ch = getchar();

  128.         }while(ch != 'Y'&& ch != 'N');



  129.         if (ch == 'Y')

  130.         {

  131.                 printfRecord(head);       

  132.         }

  133.         return 0;

  134. }
复制代码
错了好多帮忙看看
最佳答案
2024-5-27 22:13:16
本帖最后由 jackz007 于 2024-5-27 22:29 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  9. struct Record
  10. {

  11.         char name[16]        ;
  12.         int age              ;
  13.         struct Date first    ;
  14.         struct Date second   ;
  15.         struct Record * next ;
  16. }                            ;

  17. void getInput(struct Record * record)
  18. {
  19.         printf("请问名字是:")                ;
  20.         scanf("%s" , record -> name)          ;
  21.         printf("请问年龄是:")                ;
  22.         scanf("%d", & record -> age)          ;
  23.         printf("请问是否接种过疫苗:(Y/N)") ;
  24.         getchar()                             ;
  25.         if(getchar() != 'Y') {
  26.                 record -> first . year = 0    ;
  27.                 printf("请尽快接种疫苗!\n")  ;
  28.         } else {
  29.                 printf("请输入第一针接种的日期(yyyy-mm-dd) : ")                                                                      ;
  30.                 scanf("%d-%d-%d", & record -> first . year , & record -> first . month , & record -> first . day)                    ;
  31.                 printf("是否接种第二针疫苗:(Y/N)")                                                                                ;
  32.                 getchar()                                                                                                            ;
  33.                 if (getchar() != 'Y') {
  34.                         record -> second . year = 0                                                                                  ;
  35.                         printf("请尽快接种第二针疫苗!\n")                                                                           ;
  36.                 } else {
  37.                         printf("请输入接种第二针的日期((yyyy-mm-dd) :")                                                              ;
  38.                         scanf("%d-%d-%d" , & record -> second . year , & record -> second . month , & record -> second . day)        ;
  39.                 }
  40.         }
  41.         printf("\n")                                                                                                                 ;
  42. }

  43. void printRecord(struct Record * head)
  44. {
  45.         struct Record * r                                                                                                            ;
  46.         r = head                                                                                                                     ;
  47.         while(r != NULL) {
  48.                 printf("姓名 : %s , 年龄 : %d\n" , r -> name , r -> age)                                                             ;
  49.                 if(r -> first . year == 0) {
  50.                         printf("未接种疫苗!\n")                                                                                     ;
  51.                 } else {
  52.                         printf("第一针疫苗接种日期:%d-%d-%d", r -> first . year , r -> first . month , r -> first . day)            ;
  53.                         if(r -> second . year == 0) {
  54.                                 printf(" , 未接种第二针疫苗!\n")                                                                    ;
  55.                         } else {
  56.                                 printf(" , 第二针接种日期:%d-%d-%d" , r -> second . year , r -> second . month , r -> second . day) ;
  57.                         }
  58.                 }
  59.                 printf("\n")                                                                                                         ;
  60.                 r = r -> next                                                                                                        ;
  61.         }
  62. }

  63. void addRecord(struct Record ** head)
  64. {
  65.         struct Record * record                                   ;
  66.         record = (struct Record *) malloc(sizeof(struct Record)) ;
  67.         if(record == NULL) {
  68.                 printf("内存分配失败!\n")                       ;
  69.                 exit(1)                                          ;
  70.         }
  71.         getInput(record)                                         ;
  72.         record -> next = * head                                  ;
  73.         * head = record                                          ;
  74. }

  75. void releaseRecord(struct Record * head)
  76. {
  77.         struct Record * temp                                     ;
  78.         while (head != NULL) {
  79.                 temp = head                                      ;
  80.                 head = temp -> next                              ;
  81.                 free(temp)                                       ;
  82.         }        
  83. }

  84. int main(void)
  85. {
  86.         struct Record * head = NULL                              ;
  87.         char ch                                                  ;
  88.         while(1) {
  89.                 printf("请问是否需要录入:(Y/N):")                ;
  90.                 do {
  91.                         ch = getchar()                           ;
  92.                 } while(ch != 'Y' && ch != 'N')                  ;
  93.                 if(ch == 'Y') addRecord(& head)                  ;
  94.                 else break                                       ;
  95.         }
  96.         printf("请问是否需要打印已录入数据(Y/N):")            ;
  97.         do {
  98.                 ch = getchar()                                   ;
  99.         } while(ch != 'Y' && ch != 'N')                          ;
  100.         if (ch == 'Y') printRecord(head)                         ;
  101.         releaseRecord(head)                                      ;
  102. }
复制代码

        编译、运行实况:
  1. D:\[exercise]\C>g++ -o x x.c

  2. D:\[exercise]\C>x
  3. 请问是否需要录入:(Y/N):Y
  4. 请问名字是:abc
  5. 请问年龄是:18
  6. 请问是否接种过疫苗:(Y/N)Y
  7. 请输入第一针接种的日期(yyyy-mm-dd) : 2020-5-8
  8. 是否接种第二针疫苗:(Y/N)Y
  9. 请输入接种第二针的日期((yyyy-mm-dd) :2022-3-2

  10. 请问是否需要录入:(Y/N):Y
  11. 请问名字是:def
  12. 请问年龄是:17
  13. 请问是否接种过疫苗:(Y/N)Y
  14. 请输入第一针接种的日期(yyyy-mm-dd) : 2020-4-9
  15. 是否接种第二针疫苗:(Y/N)Y
  16. 请输入接种第二针的日期((yyyy-mm-dd) :2022-5-1

  17. 请问是否需要录入:(Y/N):N
  18. 请问是否需要打印已录入数据(Y/N):Y
  19. 姓名 : def , 年龄 : 17
  20. 第一针疫苗接种日期:2020- 4- 9第二针接种日期:2022- 5- 1
  21. 姓名 : abc , 年龄 : 18
  22. 第一针疫苗接种日期:2020- 5- 8第二针接种日期:2022- 3- 2

  23. D:\[exercise]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-27 16:45:43 | 显示全部楼层
在你的代码中,有几个地方出现了拼写错误和语法错误。下面是修改后的代码:

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

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

  8. struct Record {
  9.     char name[20];
  10.     int age;
  11.     struct Date first;
  12.     struct Date second;
  13.     struct Record *next;
  14. };

  15. void getInput(struct Record *record) {
  16.     printf("请问名字是:");
  17.     scanf("%s", record->name);
  18.     printf("请问年龄是:");
  19.     scanf("%d", &(record->age));
  20.    
  21.     printf("请问是否接种过疫苗:(Y/N)");
  22.     getchar();
  23.     if (getchar() != 'Y') {
  24.         record->first.year = 0;
  25.         printf("请尽快接种疫苗!\n");
  26.     } else {
  27.         printf("请输入第一针接种的日期(yyyy-mm-dd):");
  28.         scanf("%d-%d-%d", &(record->first.year), &(record->first.month), &(record->first.day));
  29.         getchar();
  30.         printf("是否接种第二针疫苗:(Y/N)");
  31.         if (getchar() != 'Y') {
  32.             record->second.year = 0;
  33.             printf("请尽快接种第二针疫苗!\n");
  34.         } else {
  35.             printf("请输入接种第二针的日期(YYYY-MM-DD):");
  36.             scanf("%d-%d-%d", &(record->second.year), &(record->second.month), &(record->second.day));
  37.         }
  38.     }
  39.     putchar('\n');
  40. }

  41. void printRecord(struct Record *head) {
  42.     struct Record *record;
  43.     record = head;
  44.     while (record != NULL) {
  45.         printf("姓名:%s, 年龄:%d\n", record->name, record->age);
  46.         if (record->first.year == 0) {
  47.             printf("未接种疫苗!\n\n");
  48.         } else {
  49.             printf("第一针疫苗接种日期:%d-%d-%d\n", record->first.year, record->first.month, record->first.day);
  50.         }
  51.         if (record->first.year != 0 && record->second.year == 0) {
  52.             printf("未接种第二针疫苗!\n\n");
  53.         } else if (record->first.year != 0) {
  54.             printf("第二针接种日期:%d-%d-%d\n", record->second.year, record->second.month, record->second.day);
  55.         }
  56.         record = record->next;
  57.     }
  58. }

  59. void addRecord(struct Record **head) {
  60.     struct Record *record, *temp;
  61.     record = (struct Record *)malloc(sizeof(struct Record));
  62.     if (record == NULL) {
  63.         printf("内存分配失败!\n");
  64.         exit(1);
  65.     }
  66.     getInput(record);
  67.     if (*head != NULL) {
  68.         temp = *head;
  69.         *head = record;
  70.         record->next = temp;
  71.     } else {
  72.         *head = record;
  73.         record->next = NULL;
  74.     }
  75. }

  76. void releaseRecord(struct Record *head) {
  77.     struct Record *temp;
  78.     while (head != NULL) {
  79.         temp = head;
  80.         head = head->next;
  81.         free(temp);
  82.     }
  83. }

  84. int main(void) {
  85.     struct Record *head = NULL;
  86.     char ch;
  87.     while (1) {
  88.         printf("请问是否需要录入:(Y/N):");
  89.         do {
  90.             ch = getchar();
  91.         } while (ch != 'Y' && ch != 'N');
  92.         if (ch == 'Y') {
  93.             addRecord(&head);
  94.         } else {
  95.             break;
  96.         }
  97.     }
  98.     printf("请问是否需要打印已录入数据(Y/N):");
  99.     do {
  100.         ch = getchar();
  101.     } while (ch != 'Y' && ch != 'N');
  102.     if (ch == 'Y') {
  103.         printRecord(head);
  104.     }
  105.     releaseRecord(head);
  106.     return 0;
  107. }
复制代码


注意,我对结构体 `Record` 中的 `name` 字段进行了修改,将其类型改为数组 `char name[20]`,这样可以保存更长的名字。另外,我还修改了函数名 `printRecond` 为正确的 `printRecord`,并修复了在程序中调用该函数时的拼写错误。同时,我还修正了部分指针解引用的语法错误。请尝试运行修改后的代码。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-27 22:13:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-5-27 22:29 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  9. struct Record
  10. {

  11.         char name[16]        ;
  12.         int age              ;
  13.         struct Date first    ;
  14.         struct Date second   ;
  15.         struct Record * next ;
  16. }                            ;

  17. void getInput(struct Record * record)
  18. {
  19.         printf("请问名字是:")                ;
  20.         scanf("%s" , record -> name)          ;
  21.         printf("请问年龄是:")                ;
  22.         scanf("%d", & record -> age)          ;
  23.         printf("请问是否接种过疫苗:(Y/N)") ;
  24.         getchar()                             ;
  25.         if(getchar() != 'Y') {
  26.                 record -> first . year = 0    ;
  27.                 printf("请尽快接种疫苗!\n")  ;
  28.         } else {
  29.                 printf("请输入第一针接种的日期(yyyy-mm-dd) : ")                                                                      ;
  30.                 scanf("%d-%d-%d", & record -> first . year , & record -> first . month , & record -> first . day)                    ;
  31.                 printf("是否接种第二针疫苗:(Y/N)")                                                                                ;
  32.                 getchar()                                                                                                            ;
  33.                 if (getchar() != 'Y') {
  34.                         record -> second . year = 0                                                                                  ;
  35.                         printf("请尽快接种第二针疫苗!\n")                                                                           ;
  36.                 } else {
  37.                         printf("请输入接种第二针的日期((yyyy-mm-dd) :")                                                              ;
  38.                         scanf("%d-%d-%d" , & record -> second . year , & record -> second . month , & record -> second . day)        ;
  39.                 }
  40.         }
  41.         printf("\n")                                                                                                                 ;
  42. }

  43. void printRecord(struct Record * head)
  44. {
  45.         struct Record * r                                                                                                            ;
  46.         r = head                                                                                                                     ;
  47.         while(r != NULL) {
  48.                 printf("姓名 : %s , 年龄 : %d\n" , r -> name , r -> age)                                                             ;
  49.                 if(r -> first . year == 0) {
  50.                         printf("未接种疫苗!\n")                                                                                     ;
  51.                 } else {
  52.                         printf("第一针疫苗接种日期:%d-%d-%d", r -> first . year , r -> first . month , r -> first . day)            ;
  53.                         if(r -> second . year == 0) {
  54.                                 printf(" , 未接种第二针疫苗!\n")                                                                    ;
  55.                         } else {
  56.                                 printf(" , 第二针接种日期:%d-%d-%d" , r -> second . year , r -> second . month , r -> second . day) ;
  57.                         }
  58.                 }
  59.                 printf("\n")                                                                                                         ;
  60.                 r = r -> next                                                                                                        ;
  61.         }
  62. }

  63. void addRecord(struct Record ** head)
  64. {
  65.         struct Record * record                                   ;
  66.         record = (struct Record *) malloc(sizeof(struct Record)) ;
  67.         if(record == NULL) {
  68.                 printf("内存分配失败!\n")                       ;
  69.                 exit(1)                                          ;
  70.         }
  71.         getInput(record)                                         ;
  72.         record -> next = * head                                  ;
  73.         * head = record                                          ;
  74. }

  75. void releaseRecord(struct Record * head)
  76. {
  77.         struct Record * temp                                     ;
  78.         while (head != NULL) {
  79.                 temp = head                                      ;
  80.                 head = temp -> next                              ;
  81.                 free(temp)                                       ;
  82.         }        
  83. }

  84. int main(void)
  85. {
  86.         struct Record * head = NULL                              ;
  87.         char ch                                                  ;
  88.         while(1) {
  89.                 printf("请问是否需要录入:(Y/N):")                ;
  90.                 do {
  91.                         ch = getchar()                           ;
  92.                 } while(ch != 'Y' && ch != 'N')                  ;
  93.                 if(ch == 'Y') addRecord(& head)                  ;
  94.                 else break                                       ;
  95.         }
  96.         printf("请问是否需要打印已录入数据(Y/N):")            ;
  97.         do {
  98.                 ch = getchar()                                   ;
  99.         } while(ch != 'Y' && ch != 'N')                          ;
  100.         if (ch == 'Y') printRecord(head)                         ;
  101.         releaseRecord(head)                                      ;
  102. }
复制代码

        编译、运行实况:
  1. D:\[exercise]\C>g++ -o x x.c

  2. D:\[exercise]\C>x
  3. 请问是否需要录入:(Y/N):Y
  4. 请问名字是:abc
  5. 请问年龄是:18
  6. 请问是否接种过疫苗:(Y/N)Y
  7. 请输入第一针接种的日期(yyyy-mm-dd) : 2020-5-8
  8. 是否接种第二针疫苗:(Y/N)Y
  9. 请输入接种第二针的日期((yyyy-mm-dd) :2022-3-2

  10. 请问是否需要录入:(Y/N):Y
  11. 请问名字是:def
  12. 请问年龄是:17
  13. 请问是否接种过疫苗:(Y/N)Y
  14. 请输入第一针接种的日期(yyyy-mm-dd) : 2020-4-9
  15. 是否接种第二针疫苗:(Y/N)Y
  16. 请输入接种第二针的日期((yyyy-mm-dd) :2022-5-1

  17. 请问是否需要录入:(Y/N):N
  18. 请问是否需要打印已录入数据(Y/N):Y
  19. 姓名 : def , 年龄 : 17
  20. 第一针疫苗接种日期:2020- 4- 9第二针接种日期:2022- 5- 1
  21. 姓名 : abc , 年龄 : 18
  22. 第一针疫苗接种日期:2020- 5- 8第二针接种日期:2022- 3- 2

  23. D:\[exercise]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-28 13:59:42 | 显示全部楼层
竟然有用AI作答的这也太坑了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-28 17:34:16 | 显示全部楼层
桃花飞舞 发表于 2024-5-28 13:59
竟然有用AI作答的这也太坑了

确实
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 11:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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