code白 小白 2022-08-18 07:09 采纳率: 100%
浏览 121
已结题

找不到问题的所在了,求支援

问题遇到的现象和发生背景

在显示功能时就会出错
在显示那个功能上第一步就凉凉了
printf("姓名:%s\t",pTemp->name);
printf("性别:%s\t",pTemp->sex);
printf("编号:%d\t",pTemp->num);
printf("身份:%s\t",pTemp->identity);
if(strcmp(pTemp->identity,"学生")==0)

问题相关代码,请勿粘贴截图

//设计一个程序,可以统计学校中所有人员(学生和老诗)的数据,学生的数据包括身份姓名编号性别和班级
//老诗的数据包括身份姓名编号性别和职务。
//分析统计数据结构体,只有一个数据不相同共用体
//程序功能存储和显示搜索
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int count;
//定义数据包
typedef union type
{
char duty[20];
char classroom[20];
}T;
typedef struct Data
{
char name[20];
char sex[20];
char identity[20];
int num;
T s;
// 加入链节点
struct Data *pNext;
}D;
D Add(DpHead)
{
int i=0;
D *pNew;
D *pEnd;
count=0;
//设置起点

pNew=pEnd=(D*)malloc(sizeof(D));
printf("输入你要录入的信息\n");
printf("姓名:");
scanf("%s",&pNew->name);
getchar();
printf("性别:");
scanf("%s",&pNew->sex);
getchar();
printf("身份:");
printf("请输入“学生”或者“老诗”\n");
scanf("%s",&pNew->identity);
getchar();
printf("编号:");
scanf("%s",&pNew->sex);
getchar();
if(strcmp(pNew->identity,"学生")==0)
{
    printf("输入班级:");
    scanf("%s",&pNew->s.classroom);    
}
else if(strcmp(pNew->identity,"老诗")==0)
{
    printf("输入职务:");
    scanf("%s",&pNew->s.duty);
}
while(1)
{
    int n;
    count++;
    printf("非0继续,0.退出\n");
    printf("输入你选的功能\n");
    scanf("%d",&n);
    if(n==0)
    {
        printf("退出\n");
        break;
    }
    else
    {
        //判断是否为第一次存入
        if(count==1)
        {
            //首节点与为节点相同
            pNew->pNext=pHead;
            pHead=pNew;
            pEnd=pNew;
        }
        else
        {
            //已存入资料将指向新录入的节点作为尾节点并指向NULL
            pNew->pNext=NULL;
            pEnd->pNext=pNew;
            pEnd=pNew;
        }
        getchar();
        pNew=(D*)malloc(sizeof(D));
        printf("输入你要录入的信息\n");
        printf("姓名:");
        scanf("%s",&pNew->name);
        getchar();
        printf("性别:");
        scanf("%s",&pNew->sex);
        getchar();
        printf("身份:\n");
        printf("请输入“学生”或者“老诗”\n");

        scanf("%s",&pNew->identity);
        getchar();
        printf("编号:");
        scanf("%s",&pNew->sex);
        getchar();
        if(strcmp(pNew->identity,"学生")==0)
        {
            printf("输入班级:");
            scanf("%s",&pNew->s.classroom);    
        }
        else if(strcmp(pNew->identity,"老诗")==0)
        {
            printf("输入职务:");
            scanf("%s",&pNew->s.duty);
        }
        getchar();

    }
}
free(pNew);
return pHead;

}
//显示信息
void Printf(D pHead)
{
D
pTemp=NULL;
int index=1;
pTemp=pHead;
printf("共有信息:%d\n",count);
while(pTemp!=NULL)
{
printf("序号:%d\t",index);
printf("姓名:%s\t",pTemp->name);
printf("性别:%s\t",pTemp->sex);
printf("编号:%d\t",pTemp->num);
printf("身份:%s\t",pTemp->identity);
if(strcmp(pTemp->identity,"学生")==0)
printf("班号:%s\n",pTemp->s.classroom);
else if(strcmp(pTemp->identity,"老诗")==0)
printf("职务:%s\n",pTemp->s.duty);
index++;
pTemp=pTemp->pNext;

}

}
int main()
{
int i;
//定义人数
D arr[100];
D *pHead=NULL;
pHead=arr;
do
{
printf("1.录入,2显示,0退出\n");
printf("输入选择\n");
scanf("%d",&i);
getchar();
//录入
if(i==1)
pHead=Add(pHead);
//显示
else if(i==2)
Printf(pHead);
else
printf("输入错误\n");
}while(i);

}

运行结果及报错内容

img

img

img

我的解答思路和尝试过的方法

刚学习链表编辑,找不出问题的所在了

我想要达到的结果

在显示功能里能完美显示出录入的信息

  • 写回答

4条回答 默认 最新

  • 吉士先生 Java领域新星创作者 2022-08-18 07:28
    关注

    pHead->引入信息试试看
    pTemp=pHead; 这个删除

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'