| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1069 人关注过本帖
标题:小白求助,一段程序总是异常退出,求大神的帮助!
只看楼主 加入收藏
PRINGZ
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
小白求助,一段程序总是异常退出,求大神的帮助!
#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;
      }
}
不知道具体错在哪了,有没有大神可以指正的
搜索更多相关主题的帖子: include choice 
2017-05-13 22:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
写的太乱了  没法改  

录入是 没有songname  建议你讲fread fwrite 替换为 fscanf  fprintf 会好些

DO IT YOURSELF !
2017-05-15 09:11
快速回复:小白求助,一段程序总是异常退出,求大神的帮助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018008 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved