| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:想编写一个关于歌曲播放记录的统计表,但一运行就出现错误额,求大神指点, ...
只看楼主 加入收藏
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:10 
想编写一个关于歌曲播放记录的统计表,但一运行就出现错误额,求大神指点,求指点,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;
      }
    }
}
搜索更多相关主题的帖子: 歌曲 include music 统计表 
2013-04-23 09:23
千里草lrn
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2012-7-27
收藏
得分:5 
scanf("%2d %8s %2d",L->data[i].no,L->data[i].music,L->data[i].num);    //scanf("%d",&i)  后面的&掉了


printf("指定位置上的歌曲播放次数为:%d\n",&num);  //输出 后面没有&  这个算警告吧
2013-04-23 17:40
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
收藏
得分:0 
回复 2楼 千里草lrn
谢谢!按你说的改了,但还是运行时有问题额,说xx.cpp已停止工工作呢,咋办能,求指教!!!3Q 3Q
2013-04-23 18:16
李沫沫
Rank: 2
来 自:唐山
等 级:论坛游民
帖 子:35
专家分:13
注 册:2013-3-14
收藏
得分:0 
楼主能不能给我解释一下char为什么定义music 呢!第十行,不是很懂

沫沫、努力学习呀!c++我来了!
2013-04-23 20:57
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:2 
L=(Sqlist*)malloc(sizeof(Sqlist));
    int n,i;
将这2行的位置换一下
2013-04-23 21:15
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
收藏
得分:0 
回复 4楼 李沫沫
歌曲名是属于字符型的,这里定义了一个char型数组用来存放歌曲名。
2013-04-23 23:15
我爱敲代码
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:70
专家分:165
注 册:2013-4-23
收藏
得分:0 
回复 5楼 czzdcn123
试过了,还是不行额。
2013-04-23 23:16
grc0108
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2012-10-2
收藏
得分:3 
回复
L=(Sqlist*)malloc(sizeof(Sqlist));这是堆分配,你在上面定义的是DataType data[MAX];这样不行吧。
2013-04-24 00:51
yun313350095
Rank: 1
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-4-10
收藏
得分:8 
2013-04-24 08:11
grclc001
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2013-4-16
收藏
得分:2 
晕了 建好的表好像传不回来。。。
2013-04-24 11:49
快速回复:想编写一个关于歌曲播放记录的统计表,但一运行就出现错误额,求大神指 ...
数据加载中...
 
   



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

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