噫吁汐 2022-03-02 14:10 采纳率: 95%
浏览 54
已结题

c语言,修改链表内容,循环意外停止



#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct patients
{
    char name[20];
    char id_number[20];
    char disease[20];
    char bed_number[5];
    int q;
    struct patients* pnext;
};
struct patients* create(int *n)
{
    struct patients *pnew,*pend,*phead;
    char space[10]={"********"};
    char a[4];
    phead=pnew=pend=(struct patients*)malloc(sizeof(struct patients));
    if(*n==0)
    {
        phead->pnext=NULL;
    }
    printf("请输入患者的姓名:");
    scanf("%s",&pnew->name);
    printf("请输入患者的证件号:");
    scanf("%s",&pnew->id_number);
    printf("请输入患者所属的科室:");
    scanf("%s",&pnew->disease);
    printf("请输入患者的病床号:");
    scanf("%s",&pnew->bed_number);
    printf("输入99结束注册");
    scanf("%d",&pnew->q);
    *n++;
    
    
    for(;;)
    {
        if(pend->q==99)
        {
            break;
        }
        pnew=(struct patients*)malloc(sizeof(struct patients));
        printf("请输入患者的姓名:");
        scanf("%s",&pnew->name);
        printf("请输入患者的证件号:");
        scanf("%s",&pnew->id_number);
        printf("请输入患者所属的科室:");
        scanf("%s",&pnew->disease);
        printf("请输入患者的病床号:");
        scanf("%s",&pnew->bed_number);
        printf("输入99结束注册");
        scanf("%d",&pnew->q);
        *n++;
        pend->pnext=pnew;
        pend=pnew;
        if(*n==19)
        {
            printf("床位已满,自动退出循环\n");
            return phead;
            
        }
    }
    return phead;
}
struct patients* re(int *n)
{
    struct patients *phead;
    phead=create(n);
    return phead;

}
void see_patients(struct patients *phead)
{
    struct patients *pend;
    pend=phead;
    for(;;)
    {
        printf("%s******",pend->name);
        printf("%s******",pend->id_number);
        printf("%s******",pend->disease);
        printf("%s******",pend->bed_number);
        printf("\n");
        pend=pend->pnext;
        if(pend==NULL)
        {
            break;
        }
    }
    
}
struct patients *change_patients(int b,struct patients *phead)
{
    int i=0;
    struct patients *pend,*pnew,*p,*q;
    pend=phead;
    
    
    for(i;i<b-1;i++)
    {
        q=pend;//one
        pend=pend->pnext;//two
        p=pend->pnext;//three
    }
    
    pnew=(struct patients*)malloc(sizeof(struct patients));
    printf("请输入患者的姓名:");
    scanf("%s",&pnew->name);
    printf("请输入患者的证件号:");
    scanf("%s",&pnew->id_number);
    printf("请输入患者所属的科室:");
    scanf("%s",&pnew->disease);
    printf("请输入患者的病床号:");
    scanf("%s",&pnew->bed_number);
    pnew->pnext=p;
    q->pnext=pnew;
    
    
    
    return phead;
    
}

void main()
{
    int l;
    int icount=0;
    struct patients *phead;
    
    menu:
    phead=re(&icount);
    printf("请输入修改链表的序号:");
    scanf("%d",&l);
    change_patients(l,phead);
    see_patients(phead);
    goto menu;
}

这个程序的goto指令只会执行一次,我不太清楚为什么

  • 写回答

1条回答 默认 最新

  • 於黾 2022-03-02 14:41
    关注

    你怎么到处写scanf呢
    create里不是应该建立一个病人的信息吗,为什么在里面死循环一直录入病人
    这逻辑乱糟糟的
    你先把逻辑分开,一个函数管一件事,别都混在一起

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 请详细说明问题背景 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 SQLServer怎么录入下标
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序
  • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
  • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
  • ¥50 求一位精通京东相关开发的专家
  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活