|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//编辑器软件为C-Free;
//输出时 共用体部分数据出现乱码 单步调试后不清楚什么问题
//源代码如下 看过视频的小伙伴 基本都知道方法
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct somebody)
static int n=0,i=0,j=0;//全局变量 记录总人数 分别学生和老师人数
struct somebody
{
int num;
char name[10];
int age;
char sex;
char job;
union{
int Class;
char room[8];
}pos;
struct somebody *next;
};
struct somebody *creat();//建立链表并输入
void print(struct somebody *head);//打印链表
int main()
{
struct somebody *head;//获得返回值
head=creat();
print(head);
printf("\n\n");
system("pause");
}
struct somebody *creat()
{
struct somebody *head,*p1,*p2;
p1=(struct somebody *)malloc(LEN);
printf("请输入编号:");
scanf("%d",&(p1->num));
if(p1->num!=0)
{
do{
printf("分别输入名字、年龄、性别(M/F)、职业(s/t),以空格间隔\n");
scanf("%s %d %s %s",&p1->name,&p1->age,&p1->sex,&p1->job);
if(p1->job=='s')//判断job
{
printf("请输入教室编号:");
scanf("%d",&p1->pos);
i++;
}
if(p1->job=='t')
{
printf("请输入办公室名称:");
scanf("%s",&p1->pos);
j++;
}
n=i+j;//总人数
if(n==1)//头结点
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;//链表的延长
p2=p1;
}
p1=(struct somebody *)malloc(LEN);
printf("请输入编号:");
scanf("%d",&p1->num); //下一节点开始
}while(p1->num!=0);//DO循环结束
p2->next=NULL;//结束
}
else head=NULL;
if(head==NULL)
printf("未建立链表\n");
return head;
}
void print(struct somebody *head)
{
struct somebody *p;
p=head;
if(p)//判断是否为空表
{
printf("\n");
printf(" num\tname\tage\tsex\tjob\tposition\n");
while(p)
{
printf(" %d\t%s\t%d\t%c\t%c\t%s",p->num,p->name,p->age,p->sex,p->job);
if(p->job=='s')
{
printf("%d\n",p->pos.Class);//问题出现在这?自己搞不明白了
}
if(p->job=='t')
{
printf("%s\n",p->pos.room);
}
p=p->next;
}
printf("共计%d名师生,其中教师%d人,学生%d人。\n",n,j,i);
}
else
{ printf("空表");}
}
|
-
结果出现如图
|