鱼C论坛

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

[已解决]单链表的插入

[复制链接]
头像被屏蔽
发表于 2021-10-18 16:11:53 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-18 16:11:54 | 显示全部楼层    本楼为最佳答案   
基础不过关 + 不认真
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  8. struct inf {
  9.     char name[10];
  10.     int age;
  11.     struct DATE date1;
  12.     struct DATE date2;
  13.     //struct DATE *next;
  14.     struct inf *next;
  15. };



  16. void getinf(struct inf *p);



  17. void addinf(struct inf **head);
  18. void addinf(struct inf **head) {
  19.     struct inf *p, *temp;

  20.     p = (struct inf *)malloc(sizeof(struct inf));

  21.     if(p == NULL) {
  22.         printf("分配内存失败!");
  23.         exit(1);
  24.     }
  25.     getinf(p);

  26.     if(*head != NULL) {
  27.         temp = *head;
  28.         *head = p;
  29.         p->next = temp;
  30.     }

  31.     else {
  32.         *head = p;
  33.         p->next = NULL;
  34.     }
  35. }

  36. void getinf(struct inf *p) {
  37.     int ch;

  38.     printf("名字:");
  39.     scanf("%s", p->name);
  40.     printf("年龄:");
  41.     scanf("%d", &p->age);
  42.     printf("是否接种过(y/n)");
  43.     getchar();
  44.     ch = getchar();
  45.     // if (ch = 'y')
  46.     if(ch == 'y') {
  47.         printf("第一针接种时间:(xxxx xx xx)");
  48.         scanf("%d %d %d", &p->date1.year, &p->date1.month, &p->date1.day);
  49.         printf("是否接种过第二针(y/n)");
  50.         getchar();
  51.         ch = getchar();
  52.         // if (ch = 'y')
  53.         if(ch == 'y') {
  54.             printf("第二针接种时间:(xxxx xx xx)");
  55.             scanf("%d %d %d", &p->date2.year, &p->date2.month, &p->date2.day);
  56.         } else {
  57.             //printf("请接种第二针");
  58.             printf("请接种第二针\n");
  59.             p->date1.year = 0;
  60.         }
  61.     } else {
  62.         //printf("尽快接种!");
  63.         printf("尽快接种!\n");
  64.         p->date2.year = 0;
  65.     }
  66. }
  67. void printinf(struct inf *head);
  68. void printinf(struct inf *head) {
  69.     struct inf *p;

  70.     p = head;

  71.     while(p != NULL) {
  72.         printf("姓名:%s,年龄:%d\n", p->name, p->age);

  73.         if(p->date1.year == 0) {
  74.             printf("未接种疫苗!\n\n");
  75.         } else {
  76.             printf("第一针疫苗接种日期:%d-%d-%d,", p->date1.year,
  77.                    p->date1.month, p->date1.day);
  78.         }

  79.         if(p->date1.year != 0 && p->date2.year == 0) {
  80.             printf("未接种第二针疫苗!\n\n");
  81.         } else if(p->date2.year != 0) {
  82.             printf("第二针疫苗接种日期:%d-%d-%d\n\n", p->date2.year,
  83.                    p->date2.month, p->date2.day);
  84.         }
  85.         p = p->next;
  86.     }
  87. }

  88. void list_free(struct inf *head) {
  89.     if(!head) return;
  90.     list_free(head->next);
  91.     free(head);
  92. }

  93. // void main(void)
  94. int main(void) {
  95.     struct inf *head = NULL;
  96.     int ch;

  97.     printf("请问是否需要录入?(y/n)");
  98.     //getchar();
  99.     ch = getchar();
  100.     if(ch == 'y') {
  101.         addinf(&head);
  102.     }

  103.     printf("是否需要打印(y/n)");
  104.     getchar();
  105.     ch = getchar();
  106.     if(ch == 'y') {
  107.         printinf(head);
  108.     }


  109.     // 释放函数一定一定一定一定一定要写
  110.     list_free(head);

  111.     printf("\n");
  112.     return 0;
  113. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
 楼主| 发表于 2021-10-18 17:06:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-18 17:17:07 | 显示全部楼层
lingoo1980 发表于 2021-10-18 17:06
请问main函数里面的
getchar();
这一句为什么删掉之后就能正常运行了呢

你为什么要 getchar ?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
 楼主| 发表于 2021-10-18 19:16:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-18 19:23:13 | 显示全部楼层
lingoo1980 发表于 2021-10-18 19:16
那为什么printinf上面的getchar()就不用注释掉呢
我有点不理解getchar的用法

你把 get 到的内容输出出来看一下是什么
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  8. struct inf {
  9.     char name[10];
  10.     int age;
  11.     struct DATE date1;
  12.     struct DATE date2;
  13.     //struct DATE *next;
  14.     struct inf *next;
  15. };



  16. void getinf(struct inf *p);



  17. void addinf(struct inf **head);
  18. void addinf(struct inf **head) {
  19.     struct inf *p, *temp;

  20.     p = (struct inf *)malloc(sizeof(struct inf));

  21.     if(p == NULL) {
  22.         printf("分配内存失败!");
  23.         exit(1);
  24.     }
  25.     getinf(p);

  26.     if(*head != NULL) {
  27.         temp = *head;
  28.         *head = p;
  29.         p->next = temp;
  30.     }

  31.     else {
  32.         *head = p;
  33.         p->next = NULL;
  34.     }
  35. }

  36. void getinf(struct inf *p) {
  37.     int ch;

  38.     printf("名字:");
  39.     scanf("%s", p->name);
  40.     printf("年龄:");
  41.     scanf("%d", &p->age);
  42.     printf("是否接种过(y/n)");
  43.     getchar();
  44.     ch = getchar();
  45.     // if (ch = 'y')
  46.     if(ch == 'y') {
  47.         printf("第一针接种时间:(xxxx xx xx)");
  48.         scanf("%d %d %d", &p->date1.year, &p->date1.month, &p->date1.day);
  49.         printf("是否接种过第二针(y/n)");
  50.         getchar();
  51.         ch = getchar();
  52.         // if (ch = 'y')
  53.         if(ch == 'y') {
  54.             printf("第二针接种时间:(xxxx xx xx)");
  55.             scanf("%d %d %d", &p->date2.year, &p->date2.month, &p->date2.day);
  56.         } else {
  57.             //printf("请接种第二针");
  58.             printf("请接种第二针\n");
  59.             p->date1.year = 0;
  60.         }
  61.     } else {
  62.         //printf("尽快接种!");
  63.         printf("尽快接种!\n");
  64.         p->date2.year = 0;
  65.     }
  66. }
  67. void printinf(struct inf *head);
  68. void printinf(struct inf *head) {
  69.     struct inf *p;

  70.     p = head;

  71.     while(p != NULL) {
  72.         printf("姓名:%s,年龄:%d\n", p->name, p->age);

  73.         if(p->date1.year == 0) {
  74.             printf("未接种疫苗!\n\n");
  75.         } else {
  76.             printf("第一针疫苗接种日期:%d-%d-%d,", p->date1.year,
  77.                    p->date1.month, p->date1.day);
  78.         }

  79.         if(p->date1.year != 0 && p->date2.year == 0) {
  80.             printf("未接种第二针疫苗!\n\n");
  81.         } else if(p->date2.year != 0) {
  82.             printf("第二针疫苗接种日期:%d-%d-%d\n\n", p->date2.year,
  83.                    p->date2.month, p->date2.day);
  84.         }
  85.         p = p->next;
  86.     }
  87. }

  88. void list_free(struct inf *head) {
  89.     if(!head) return;
  90.     list_free(head->next);
  91.     free(head);
  92. }

  93. // void main(void)
  94. int main(void) {
  95.     struct inf *head = NULL;
  96.     int ch;

  97.     printf("请问是否需要录入?(y/n)");
  98.     //getchar();

  99.     ch = getchar();
  100.     printf("debug: %x\n", ch);



  101.     ch = getchar();
  102.     if(ch == 'y') {
  103.         addinf(&head);
  104.     }

  105.     printf("是否需要打印(y/n)");

  106.     ch = getchar();
  107.     printf("debug: %x\n", ch);
  108.     ch = getchar();
  109.     printf("debug: %x\n", ch);

  110.     /*
  111.     getchar();
  112.     ch = getchar();
  113.     */
  114.     if(ch == 'y') {
  115.         printinf(head);
  116.     }


  117.     // 释放函数一定一定一定一定一定要写
  118.     list_free(head);

  119.     printf("\n");
  120.     return 0;
  121. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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