想编写一个关于歌曲播放记录的统计表,但一运行就出现错误额,求大神指点,求指点,3Q 3Q
#include <stdio.h>#include<stdlib.h>
#include <string.h>
# define MAX 100
#define OK 1
#define ERROR -1
typedef struct
{
int no;//序号
char music[MAX];//歌名
int num;//点播次数
}DataType;
typedef struct
{
DataType data[MAX];
int length;
}Sqlist;
int Init_Sqlist(Sqlist *L)//建立歌曲播放表
{ L=(Sqlist*)malloc(sizeof(Sqlist));
int n,i;
printf("请输入歌曲数目:");
scanf("%d",&n);
while(n<1||n>MAX)
{
printf("输入有误,请重新输入!\n");
scanf("%d",&n);
}
for(i=0;i<=n-1;i++)
{
printf("请输入第%d首歌曲的相关信息(请输入):\n",i+1);
printf("序号 歌曲 点播次数\n");
scanf("%2d %8s %2d",L->data[i].no,L->data[i].music,L->data[i].num);
}
L->length=n;
return OK;
}
int Insert_Sqlist(Sqlist *L, DataType *gq,int i)//按指定位置插入数据
{ int j;
if(j<=0||j>=L->length+2||L->length>MAX)
{printf("要插入的位置有误,无法插入!\n");
return ERROR;}
for(j=L->length-1;j>=i-1;j--)
{L->data[j+1].no=L->data[j].no+1;
strcpy(L->data[j+1].music,L->data[j].music);
L->data[j+1].num=L->data[j].num;
}
L->data[j+1].no=gq->no;
strcpy(L->data[j+1].music,gq->music);
L->data[j+1].num=gq->num;
L->length++;
return OK;
}
int Delete_Sqlist(Sqlist *L,int i)//按指定位置删除数据
{int k;
if(i<=0||i>L->length)
{printf("要删除的位置不存在!\n");
return ERROR;
}
for(k=i;k<=L->length-1;k++)
{L->data[k-1].no=L->data[k].no-1;
strcpy(L->data[k-1].music,L->data[k].music);
L->data[k-1].num=L->data[k].num;
L->length--;}
return OK;
}
int Update_Sqlist(Sqlist *L,int i,DataType *gq)//修改
{if(i<1||i>L->length)
return ERROR;
else
{
strcpy(L->data[i-1].music,gq->music);
L->data[i-1].num=gq->num;
}
return OK;
}
int Get_Sqlist(Sqlist *L,int i,DataType *gq)//取元素
{if(i>=1&&i<=L->length)
{ strcpy(gq->music,L->data[i-1].music);
gq->num=L->data[i-1].num;
return OK;
}
else
return ERROR;
}
int Locate_Sqlist(Sqlist *L,DataType *gq)//元素位置查询
{
int i=0,found=0;
while(i<L->length&&found==0)
{if(strcmp(L->data[i].music,gq->music)==0)
found=1;
else
i++;
if(found=1)
return i+1;
else
return 0;
}
}
int Traverse_Sqlist(Sqlist *L)//遍历
{int i;
for(i=0;i<L->length;i++)
{
printf("序号:%2d",L->data[i].no);
printf("歌曲名:%8s",L->data[i].music);
printf("点播次数:%4d",L->data[i].num);
printf("\n");
}
printf("***********END***********");
return OK;
}
int Clear_Sqlist(Sqlist *L)//清空
{
L->length=0;
return OK;
}
void main()
{ int no,num;
char music[MAX];
int sfjx=1;
int n,i,j,k;
Sqlist L;
DataType gq;
/*printf("请输入歌曲数量:n=");
do
{
scanf("%d",&n);
if(n<=0||n>MAX)
printf("输入的数据不合法,请重新输入:n=");
}while(n<=0||n>MAX);*/
printf("*****************************************************************\n");
printf("** 1.建立歌曲表 2.向数组中插入数据 **\n");
printf("** 3.删除数组中的数据 4.修改 **\n");
printf("** 5.取元素 6.元素位置查询 **\n");
printf("** 7.遍历 8.清空 **\n");
printf("** 9.结束 **\n");
printf("*****************************************************************\n");
while(sfjx!=0)
{
scanf("%d",&sfjx);
switch(sfjx)
{
case 1:
if(Init_Sqlist(&L)==OK)
printf("歌曲表建立成功!\n");
else
printf("ERROR!\n");
case 2:
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入该歌曲的名称:\n");
scanf("%s",music);
printf("请输入该歌曲点播的次数:\n");
scanf("%d",&num);
if(Insert_Sqlist(&L,&gq,i)==OK)
printf("插入成功!\n");
else
printf("ERROR!\n");
break;
case 3:
printf("请输入要删除的位置:\n");
scanf("%d",&i);
if(Delete_Sqlist(&L,i)==OK)
printf("删除成功!\n");
else
printf("ERROR\n");
break;
case 4:
printf("请输入要修改的位置:");
scanf("%d",&i);
printf("请输入歌曲名:");
scanf("%s",music);
printf("请输入播放次数:");
scanf("%d",&num);
if(Update_Sqlist(&L,i,&gq)==OK)
printf("修改成功!\n");
else
printf("ERROR!\n");
break;
case 5:
printf("请输入要取元素的位置:");
scanf("%d",&i);
if(Get_Sqlist(&L,i,&gq)==OK)
{printf("指定位置上的歌曲名为:%s\n",music);
printf("指定位置上的歌曲播放次数为:%d\n",&num);}
else
printf("ERROR!\n");
break;
case 6:
printf("请输入要查询元素的内容:");
scanf("%s",music);
printf("此元素的逻辑位置为:%d(0表示未找到)",Locate_Sqlist(&L,&gq));
break;
case 7:
Traverse_Sqlist(&L);
break;
case 8:
Clear_Sqlist(&L);
break;
case 9:
printf("谢谢使用,再见!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}