小白求助,一段程序总是异常退出,求大神的帮助!
#include<stdio.h>#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 30
int i,j,k;
FILE *fp;
struct song_info{
int songnum;
char songname[15];
char singername[15];
char ablumname[15];
char type[10];
};
typedef struct song_info SINFO;
SINFO *pso;
void choice(SINFO *PSO)
{ char a[15];
int q,t;
FILE *fp;
printf("请输入要查看的歌手名字: ");
scanf("%s",a);
fp=fopen("song.txt","rt");
if(fp==NULL)
{
printf("the file:song.txt not found!\n");
exit(-1);
}
for(k=0;(!feof(fp));k++)
fread(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
t=0;
for(q=0;0<k;q++)
{
if(!strcmp(a,pso[q].singername))
{
if(t==0)
printf("这位歌手有以下歌曲:\n");
t++;
printf("%s\n",pso[q].songname);
}
}
if(t==0)
printf("系统中没有这位歌手的资料\n");
fclose(fp);
}
void add(SINFO *pso){
fp=fopen("song.txt","a+");
printf("请输入你要添加歌曲的数量:");
scanf("%d",&j);
fflush(stdin);
for(i=0;i<j;i++)
{
printf("这是要添加的第%d首歌的信息: \n",i+1);
printf("歌曲编号是:");
scanf("%d",&pso[i].songnum);
fflush(stdin);
printf("歌曲名字是:");
gets(pso[i].singername);
fflush(stdin);
printf("专辑名字是:");
gets(pso[i].ablumname);
fflush(stdin);
printf("歌曲流派是:");
gets(pso[i].type);
fflush(stdin);
system("cls");
fwrite(&pso[i],sizeof(SINFO),1,fp);
}
fclose(fp);
printf("歌曲添加成功!\n");
}
void show(SINFO *pso)
{
FILE *fp;
fp=fopen("song.txt","rt");
if(fp=NULL)
{
printf("the file : song.txt not found!");
exit(-1);
}
printf("所有歌曲信息如下:\n");
for(k=0;!feof(fp);k++)
{
fread(&pso[k],sizeof(SINFO),1,fp);
}
fclose(fp);
printf("%s%15s%20s%15s%15s","歌曲编号","歌名","歌手","专辑","专辑流派");
printf("\n");
for(i=0;i<k-1;i++)
{
printf("%03d%20s%20s%15s%15s",pso[i].songname,pso[i].singername,pso[i].ablumname,pso[i].type);
printf("\n");
}
}
void dele(SINFO *pso){
char a[15];
int q;
FILE *fp;
printf("请输入要删除歌曲的名字:");
scanf("%s",a);
fp=fopen("song.txt","rt");
if(fp==NULL)
{
printf("the file:song.txt not found!");
exit(-1);
}
for(k=0;(!feof(fp));k++)
fread(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
for(q=0;q<k;q++)
if(!strcmp(a,pso[q].songname))
memset(&pso[q],0,sizeof(SINFO));
fp=fopen("song.txt","w+");
for(k=0;k<q;k++)
fwrite(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
printf("删除歌曲成功!\n");
}
void out(){
char a;
printf("确定退出系统?(y/n)");
scanf("%c",&a);
if('y'==a)
exit(0);
}
int main(void){
SINFO *pso;
loop: printf(" 欢迎使用全民嗨歌点歌系统 \n");
printf(" 1.点歌 \n");
printf(" 2.新增歌曲 \n");
printf(" 3.查看歌曲信息 \n");
printf(" 4.删除歌曲 \n");
printf(" 5.退出 \n");
printf(" 请选择功能: ");
scanf("%d",&i);
fflush(stdin);
pso=(SINFO*)malloc(N*sizeof(SINFO));
memset(pso,0,(N*sizeof(SINFO)));
system("cls");
switch(i){
case 1:choice(pso);
goto loop;
break;
case 2:add(pso);
goto loop;
break;
case 3:show(pso);
goto loop;
break;
case 4:dele(pso);
goto loop;
break;
case 5:out();
goto loop;
break;
default:printf("输入错误!请重新选择!\n");
goto loop;
}
}
不知道具体错在哪了,有没有大神可以指正的