groundchor 2020-02-18 16:43 采纳率: 0%
浏览 822

C语言小白实现记录学校人员信息:代码如下,为什么在scanf输入第一个人员数据后按回车不能输入下一个人员数据而是程序结束?

#include<stdio.h>                                           /*实现记录学校人员信息,包括学生和老师,其中信息包含身份、姓名、性别、职务/班级*/
#include<stdlib.h>

struct Position                                                                /*结构体变量定义班级或职务*/
{
    int iClass;
    char cStaff[];
};

union Membership                                                               /*共用体变量定义成员信息*/
{
    char cStatus[];
    char cName[];
    int iNumber;
    char cSex[];
    int iGo;                                                                   /*作为判断是否继续的依据*/
    struct Position Text;                                                      /*共用体中引用结构体*/
    union Membership* pNext;                                                   /*指向下一个结点指针*/
};

int iCount;                                                                    /*定义全局链表长度*/

union Membership* Create()
{
    union Membership *pHead=NULL;                                              /*头指针初始化为空*/
    union Membership *pNew, *pEnd;
    iCount=0;                                                                  /*链表长度初始化为0*/
    pNew=pEnd=(union Membership*)malloc(sizeof(union Membership));             /*创建动态链表*/
    printf("请输入学校人员信息:\n");                                           /*提示信息*/
    printf("身份  姓名  编号  性别  职务  班级  是否继续\n");
    scanf("%s",&pNew->cStatus);                                                /*输入信息*/
    scanf("%s",&pNew->cName);
    scanf("%d",&pNew->iNumber);
    scanf("%s",&pNew->cSex);
    scanf("%d",&pNew->Text.iClass);
    scanf("%s",&pNew->Text.cStaff);
    scanf("%d",&pNew->iGo);
    while(&pNew->iGo!=0);                                                      /*判断语句是否进行*/
    {
        iCount++;
        if(iCount==1)
        {
            pNew->pNext=pHead;                                                 /*使指向为空*/
            pEnd=pNew;                                                         /*跟踪新加入的结点*/
            pHead=pNew;                                                        /*头指针指向首结点*/
        }
        else
        {
            pNew->pNext=NULL;                                                  /*新结点的指针为空*/
            pEnd->pNext=pNew;                                                  /*原来的尾结点指向新结点*/
            pEnd=pNew;                                                         /*pEnd指向新结点*/
        }
        pNew=(union Membership*)malloc(sizeof(union Membership));              /*再次分配节点内存空间*/
        scanf("%s",&pNew->cStatus);
        scanf("%s",&pNew->cName);
        scanf("%d",&pNew->iNumber);
        scanf("%s",&pNew->cSex);
        scanf("%d",&pNew->Text.iClass);
        scanf("%s",&pNew->Text.cStaff);
        scanf("%d",&pNew->iGo);
    }
    free(pNew);                                                                /*释放无用空间*/
    return pHead;
}

void Print(union Membership* pHead)
{
    union Membership *pTemp;                                                   /*定义临时指针*/
    int iIndex=1;                                                              /*定义结点序号*/

    printf("数据库中共有%d个人\n",iCount);
    printf("\n");
    pTemp=pHead;                                                               /*指针得到首结点地址*/

    while(pTemp!=NULL)
    {
        printf("第%d个人员信息如下:\n");
        printf("身份:%s\n",pTemp->cStatus);
        printf("姓名:%s\n",pTemp->cName);
        printf("编号:%d\n",pTemp->iNumber);
        printf("性别:%s\n",pTemp->cSex);
        printf("班级:%d",pTemp->Text.iClass);
        printf("职务:%s\n",pTemp->Text.cStaff);
        printf("\n");
        pTemp=pTemp->pNext;                                                    /*移动临时指针到下一个结点*/
        iIndex++;
    }
}

int main()
{
    union Membership *pHead;                                                   /*定义头结点*/
    pHead=Create();                                                            /*创建结点*/
    Print(pHead);                                                              /*输出链表*/
    return 0;                                                                  /*程序结束*/
}

  • 写回答

1条回答

  • zqbnqsdsmd 2020-02-18 18:35
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试