猿问

这个程序有错,怎么修改。

#include<stdio.h>
typedef struct
{
 int year;
 int month;
 int day;
}Data;
typedef struct
{
 int id; //图书编号
 char name[20];//图书名
 int price;//价格
 Data pubData;//出版日期
}Book;
typedef Book ElemType;
typedef struct LNode
{
 Book data;
 struct LNode *next;
}LNode;
int InsertList(LNode *L,int i,ElemType e)
{
 int j;
 LNode *p,*q;
 //初始化,指向头结点,并初始化计数器j=0
 p=L;j=0;
 //循环:将指针指向第i-1个结点
 while(p!=NULL&&j<i-1)
 {
  p=p->next;
  j++;
 }
 //检果i是否正确(1<=i<=n+1)    j>i-1时,i<1
 if(p==NULL||j>i-1)return 0;//p==NULL时,i>n+1
 //分配空间并插入

 if(q==NULL)return 0;
 q->data=e;
 q->next=p->next;
 p->next=q;
 return 1;
}
void display(LNode *L)
{
 LNode *p;
 p=L->next;
 printf("\t书号\t%-16s价格\t出版日期\n","书名");
 while(p!=NULL)
 {
  printf("\t%d\t%-16s%d\t%d-%d-%d\n"
   ,p->data.id,p->data.name,p->data.price
   ,p->data.pubData.year
   ,p->data.pubData.month
   ,p->data.pubData.day);
  p=p->next;
 }
}
//菜单
void menu(LNode *L)

 int a,loc;
 int e,result; 
 int select; 
 int InsertList;
 do
 {
  system("cls");//清屏
  printf("\t****************************\n");
  printf("\t*1.添加新的图书            *\n");
  printf("\t*2.删除指定图书            *\n");
  printf("\t*3.查找指定图书(书名)      *\n");
  printf("\t*4.修改图书信息            *\n");
  printf("\t*5.显示所有的图书          *\n");
  printf("\t*0.退出                    *\n");
  printf("\t****************************\n");
  printf("\t请输入操和代码:");
  scanf("%d",&select);
  switch(select)
  {
  case 1:
   //插入一个元数到指定位置
   printf("\t请输入要插入的元素:");
   scanf("%d",&e);
   printf("\t请输入要插入的位置:");
   scanf("%d",&loc);
            result=InsertList(a,loc,&e);
   if(result==0)printf("\t插入元素%d失败!\n",e);
   else
   printf("\t插入元素%d成功!\n",e);
   system("pause");
   break;
  case 2:
   //删除指定位置的元素符号
   printf("\t请输入要删除的位置:");
   scanf("%d",&loc);
   result=DeleteList(a,loc,&e);
   if(result==0)printf("\t删除第%d个元素失败!\n",loc);
   else printf("\t删除第%d个元素成功!该值为:%d\n",loc,e);
   system("pause");
   break;
  case 3:
   //查找指定元素的位序
      printf("\t请输入要查找的元素:");
   scanf("%d",&e);
   loc=LocateList(a,e);
   if(loc==0)printf("\t查找元素%d失败!\n",e);
   else printf("\t查找元素%d成功!该元素的位序是:%d\n",e,loc);
   system("pause");
   break;
  case 4:
   //修改图书信息
      printf("\t请输入要修改图书信息:");
   scanf("%d",&e);
   loc=ModifyList(a,e);
   if(loc==0)printf("\t修改图书信息%d失败!\n",e);
   else printf("\t修改图书信息%d成功!该图书信息是:%d\n",e,loc);
   system("pause");
   break;
  case 5:
   //显示所有的元素
   display(L);
   system("pause");
   break;
  case 0:
   //退出
   printf("\t请问是否确定要退出程序!(Y/N)");
   //接收用户输入的选择并执行是否要退出的功能
   exit(0);
   break;
  }
 }while(select<0||select>5);
}
int main()
{
 LNode H;
 Book book1={1,"数据结构",34,{2014,1,25}};
 Book book2={2,"C语言程序设计",31,{2013,11,12}};
 Book book3={3,"Java面向对象",42,{2015,8,1}};
 Book book4={4,"Web应用开发",68,{2016,10,18}};
 Book book5={5,"Android开发基础",75,{2017,3,30}};
 H.next=NULL;
 InsertList(&H,1,book1);
 InsertList(&H,2,book2);
 InsertList(&H,3,book3);
 InsertList(&H,4,book4);
 InsertList(&H,5,book5);
 
 while(1)
 {
  menu(&H);
 }

}

慕粉0859542940
浏览 1237回答 2
2回答

zhonzxad

大致放到编译器里游览了一下楼主的程序,好多变量楼主作为函数中定义,但同时在另外的函数内部,又当做了同名变量使用。另外楼主使用了许多未定义函数,楼主检查一下是否头文件没包含。

Weber_Wang

建议提问格式化一下代码  看了眼花头疼  很难作答
随时随地看视频慕课网APP
我要回答