偏正北海
2022-07-06 11:37
采纳率: 100%
浏览 33

数据结构链表指针无法与整数比较无法运行

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

无法运行,在另一个程序上可以运行出结果,但在这个程序上不行、

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

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
//结点类型定义
typedef struct{
int id;//职工号
char name[00];//名字
char sex[10];//性别
char birthday[15];//出生年月
char wages[15];//工资
char address[60];//住址
char education[10];//学历
char positions[10];//职务
} ElemType;
typedef struct node{
ElemType data;
struct node* next;
}LNode,* LinkList;

//函数声明
void ListCreate(LinkList &L,int n); //创建员工基本信息链表
void ListPrint(LinkList L); //浏览员工基本信息
void LocateElem(LinkList L,int x); //查找 某个员工基本信息
void ListInsert(LinkList &L,ElemType e); //添加员工信息到单链表
void ListDelete(LinkList &L,int x); //删除一个员工信息
void welcome();
//主函数
int main()
{system("color 3f");
int control; // 循环中控制操作
int x; //查找的员工学号
int n; //欲创建的员工个数
ElemType e; //员工信息
LinkList p; //工作指针
LinkList L; //链表头指针
while(1){
printf(" 1创造链表 2输出链表 3查找 4插入 5删除 6 结束程序\n");
//主循环
scanf("%d",&control);
printf("请输入要创建的员工个数n=:\n");
scanf("%d",&n);
while(control)
{
switch(control)
{
case 1:
{
printf("请依次输入员工职工号,姓名,出生年月日,性别,住址,学历,工资\n");
ListCreate(L,n);
};break;
case 2:
ListPrint(L);break;//输出链表内容

case 3:
{
printf("请输入要查找的员工工资\n");
scanf("%d",&x);
LocateElem(L,x);
};break;
case 4:
{
printf("请输入欲插入的员工信息\n");
scanf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
ListInsert(L,e);
};break;
case 5:
{
printf("请输入欲删除员工的职工号\n");
scanf("%d",&x);
ListDelete(L,x);
};break;
default:
{
printf("程序结束\n");
exit(0);
}break;//结束程序
}
printf("0结束程序 1创造链表 2输出链表 3查找 4插入 5删除\n");
scanf("%d",&control);
}
}
return 0;
}

void ListCreate(LinkList &L,int n){
//正位序输入n个元素的值,建立带表头结点的单链表L
LinkList p,r;
int i;
FILE *fp;//文件
fp=fopen("employee.txt","a+");
if (fp == NULL) //判断文件是否成功打开
{
printf("File open failed!\n");
exit(0);
}
L = (LinkList) malloc (sizeof(LNode));
L->next=NULL;
r=L; //尾指针r指向头结点
for(i=0;i<n;++i){
p = (LinkList) malloc (sizeof(LNode)); //生成新结点
scanf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输入元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p->next=NULL; r->next=p; //插入到表尾
r=p; //r指向新的尾结点
}
fprintf(fp,"姓名:%c\n性别:%c\n职工号:%d\n",p->data.name,p->data.sex,p->data.id);
fprintf(fp,"出生年月日:%d年%d月%d日\n",p->data.birthday);
fprintf(fp,"工资:%d\n住址:%c\n学历:%c\n职务:%c\n\n",p->data.wages,p->data.address,p->data.education,p->data.positions);
fclose(fp);
}

//输出链表的值
void ListPrint(LinkList L)
{
LinkList p=L->next;
if(!p)
printf("没有元素输出\n");
while (p)
{
printf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资
p=p->next;
}
}
//工资定位
void LocateElem(LinkList L,char x)
{
LinkList p=L->next;
int j=0;
while ((p)&&(p->data.wages!=x))
{p=p->next; j++;}
if(!p)
printf("没有该信息\n");
else
printf("%d6个%s",&p->data.id,p->data.name,&p->data.birthday,p->data.sex,p->data.address,p->data.education,p->data.wages); //输chu元素值 ,职工号,姓名,出生年月日,性别,住址,学历,工资

}

//插入
void ListInsert(LinkList &L,ElemType e)
{
// 在带头结点的单链线性表L表尾插入元素e
LinkList q,p=L;
while (p->next)
{p=p->next;}
q=(LinkList)malloc(sizeof(LNode));
p->next=q;
q->data=e;
q->next=NULL;
}
//删除
void ListDelete(LinkList &L,int x)
{
LinkList q,p=L;
while ((p->next)&&(p->next->data.id!=x))
p=p->next;
if(!p->next)
printf("没有找到学号为%d的学生信息\n",x);
else
{
q=p->next;
p->next=p->next->next;
free(q);
}
}

运行结果及报错内容

img

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

改变x类型为char

我想要达到的结果

可以有正确结果.
/要求职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、
电话等(职工号不重复)。试设计一个职工信息管理系统,包括以下功能:
a) 系统以菜单方式工作;000
b) 职工信息录入功能(职工信息用文件保存)--输入;000
c) 职工信息浏览功能 --输出;000
d) 查询或排序功能:(至少一种查询方式) --算法;
e) 按工资查询;
f) 按学历查询。
/

2条回答 默认 最新

相关推荐 更多相似问题