花火ios 2021-09-16 21:07 采纳率: 100%
浏览 24
已结题

C语言单链表系统错误

查找 修改 删除 找不到

#include <stdio.h>
#include <stdlib.h>
struct goods
{
char number[6];
char category[12];
int amount;
};
struct LNode
{
struct goods data; //数据域
struct LNode *next; //指针域
};
typedef struct LNode LinkList;

void meum();
void choice(int *stop,LinkList *L);
void creat_node(LinkList *L);
void show_goods(LinkList *L);
void search_goods(LinkList *L);
void delete_goods(LinkList *L);
void modify_goods(LinkList *L);

int main()
{
int i;
LinkList *L=NULL;
L=(LinkList *)malloc(sizeof(LinkList));
if(L==NULL)
{
printf("分配头节点内存出错!");
exit(1);
}
memset(L,0,sizeof(LinkList));
L->next=NULL;

int stop=1;
while(1)
{
    meum();
    choice(&stop,L);
    if(stop==0)
        break;
    printf("\n     下一步操作:");
    printf("\n     1.返回主界面");
    printf("\n     2.退出系统");
    printf("\n     请输入操作:");
    scanf("%d",&i);
    if(i==2)
        break;
}
return 0;

}

void creat_node(LinkList *L)
{
LinkList *node=NULL;
LinkList *temp=L->next; //作为链表连接的中间点
node=(LinkList *)malloc(sizeof(LinkList)); //分配内存
if(node==NULL)
{
printf("分配普通节点内存出错!");
exit(1);
}
memset(node,0,sizeof(LinkList));
printf("\n请输入物品序号:");
scanf("%s", node->data.number);
printf("\n请输入物品种类:");
scanf("%s",node->data.category);
printf("\n请输入物品数量:");
scanf("%d",&node->data.amount);
L->next=node;
node->next=temp;
}

void show_goods(LinkList *L)
{
LinkList *p=L->next;
int i=0;
printf("\n ************************** \n");
printf(" 物品信息 \n");
printf(" ************************** \n");
printf(" 序号 种类 数量 \n");
while(p)
{
printf(" %s %s %d \n",p->data.number,p->data.category,p->data.amount);
i++;
p=p->next;
}
}

void search_goods(LinkList *L)
{
int x=0;
char number;
char category[12];
LinkList *temp;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.按序号查找!");
printf("\n 2.按种类查找!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要查找物品的序号:");
scanf("%s",&number);
while(temp->data.number!=number && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.number==number)
{
printf("\n 已经找到物品的信息!");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
}
else
{
printf("\n 没有查找到物品!");
}
}
else if(x==2)
{
printf("\n 请输入要查找物品的种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.category==category)
{
printf("\n 已经找到物品的信息!");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
}
else
{
printf("\n 没有要查找到物品!");
}

}

}

void delete_goods(LinkList *L)
{
int x=0;
char number;
char category[12];
LinkList *temp,*pre;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.按序号删除!");
printf("\n 2.按种类删除!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要删除的物品序号:");
scanf("%s",number);
while(temp->data.number!=number && temp->next!=NULL)
{
pre=temp;
temp=temp->next;
}
if(temp->data.number==number)
{
pre->next=temp->next;
free(temp);
}
else
{
printf("\n 没有所要删除的物品序号!");
}
}
else if(x==2)
printf("\n 请输入要删除的物品种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
pre=temp;
temp=temp->next;
}
if(strcmp(temp->data.category,category)==0)
{
pre->next=temp->next;
free(temp);
}
else
{
printf("\n 没有要删除的物品种类!");
}
}

void choice(int *stop,LinkList *L)
{
int num;
printf("\n\n 请输入菜单选项:");
scanf("%d",&num);
switch (num)
{
case 0:
*stop=0;
break;
case 1:
show_goods(L);
break;
case 2:
search_goods(L);
break;
case 3:
creat_node(L);
break;
case 4:
delete_goods(L);
break;
case 5:
modify_goods(L);
break;
default:
printf(" 请在0-5中间选择\n");
}
}

void meum()
{
printf("\n ***************************** \n");
printf(" 物品信息管理系统 \n");
printf(" ***************************** \n");
printf(" 系统菜单功能 \n");
printf(" ***************************** \n");
printf(" 1.浏览物品信息 \n");
printf(" 2.查找物品信息 \n");
printf(" 3.添加物品信息 \n");
printf(" 4.删除物品信息 \n");
printf(" 5.修改物品信息 \n");
printf(" 0.退出系统 \n");
}

void modify_goods(LinkList *L)
{
int x=0;
char num;
char category[12];
LinkList *temp;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.知道要修改物品的序号!");
printf("\n 2.知道要修改物品的种类!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要修改物品的序号:");
scanf("%s",num);
while(temp->data.number!=num && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.number==num)
{
printf("\n 已经找到要修改物品的信息!");
}
else
{
printf("\n 没有要修改物品的序号!");
}
}
else if(x==2)
{
printf("\n 请输入要修改物品的种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
temp=temp->next;
}
if(strcmp(temp->data.category,category)==0)
{
printf("\n 已经找到要修改物品的信息!");
}
else
{
printf("\n 没有要修改物品的种类!");
}
}
printf("\n ************************");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
do
{
printf("\n 请选择:");
printf("\n 1.修改序号!");
printf("\n 2.修改种类!");
printf("\n 3.修改数量!");
printf("\n 请输入选择:");
scanf("%d",&x);
}
while(x<1 || x>3);
if(x==1)
{
printf("\n 请输入修改后的序号:");
scanf("%s",temp->data.number);
}
if(x==2)
{
printf("\n 请输入修改后的种类:");
scanf("%s",temp->data.category);
}
if(x==3)
{
printf("\n 请输入修改后的数量:");
scanf("%d",&temp->data.amount);
}

}

  • 写回答

1条回答 默认 最新

  • orange4reg 2021-09-16 21:43
    关注

    if(temp->data.category==category)

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

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月16日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料