| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:大家帮我来找一个错误,找了半天不知道哪里错了的。
只看楼主 加入收藏
yangyuzhigua
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
大家帮我来找一个错误,找了半天不知道哪里错了的。
#include<stdio.h>
#include<stdlib.h>
#define size 10
struct data{
    int chenji;
    char name[size];
};
struct sqlist{
    struct data *student;
    int length;
};
void bincertsort(struct sqlist *l);

main(){
    int i,j;
    int s=1;
    struct sqlist *l=(struct sqlist *)malloc(sizeof(struct sqlist));
    printf("请先输入学生的个数:");
    scanf("%d",&i);
    l->student=(struct data *)malloc((i+1)*sizeof(struct data));
    for(j=1;j<=i;j++){
        printf("请输入学生的成绩和姓名:");
        scanf("%d %s",&(l->student[j].chenji),l->student[j].name);   
}
   
    l->length=i;
    bincertsort(l);
    printf("姓名\t成绩\t名次\n");
    for(j=i;j>=1;j--){
        
        printf("%s\t%d\t%d\n",l->student[j].name,l->student[j].chenji,s);
        s++;
    }

}

void bincertsort(struct sqlist *l){
    int i,high,low,m,j;
    for(i=2;i<=l->length;++i){
        l->student[0]=l->student[i];
        while(low<=high){
            m=(low+high)/2;
            if(l->student[0].chenji<l->student[m].chenji) high=m-1;
            else low =m+1;
        }
        for(j=i-1;j>=high+1;--j) l->student[j+1]=l->student[j];
        l->student[high+1]=l->student[0];
    }
}
好像是那个排序的子函数出了问题,求高手作解释。
2011-06-18 07:28
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:10 
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 #define size 10

 struct data{
     int chenji;
     char name[size];

 };

 struct sqlist{
     struct data *student;
     int length;

 };

 void bincertsort(struct sqlist *l);

 
main(){
     int i,j;
     int s=1;
     struct sqlist *l=(struct sqlist *)malloc(sizeof(struct sqlist));
     printf("请先输入学生的个数:");
     scanf("%d",&i);
     l->student=(struct data *)malloc((i+1)*sizeof(struct data));
     for(j=1;j<=i;j++){
         printf("请输入学生的成绩和姓名:");
         scanf("%d %s",&(l->student[j].chenji),l->student[j].name); //少了个&   
}
     
    l->length=i;
     bincertsort(l); 
     printf("姓名\t成绩\t名次\n");
     for(j=i;j>=1;j--){
         
         printf("%s\t%d\t%d\n",l->student[j].name,l->student[j].chenji,s);
         s++;
     }

 
}

 
void bincertsort(struct sqlist *l){
     int i,high,low,m,j;
     for(i=2;i<=l->length;++i){
         l->student[0]=l->student[i];
         while(low<=high){
             m=(low+high)/2;
             if(l->student[0].chenji<l->student[m].chenji) high=m-1;
             else low =m+1;
         }
         for(j=i-1;j>=high+1;--j) l->student[j+1]=l->student[j];
         l->student[high+1]=l->student[0];
     }

 }

 

还有就是你开始并没有定义一个结构体数组student[];
下面的用到的结构体数组student[]从哪里来??
2011-06-18 10:08
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
一般想查出错误,有以下几种方式可供选择
1:利用调式器提供的功能,具体可以看看debug下的菜单选项, 比如 watch 。
2:输出语句查看信息, 输出可以打印到 OutputWindow,CommandLine, File
3: 断言 assert
4:异常处理

有时间都试下,

[ 本帖最后由 BlueGuy 于 2011-6-18 12:00 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-06-18 11:56
shinan77
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:188
注 册:2010-9-24
收藏
得分:5 
回复 3楼 BlueGuy
3楼说得好详细,楼主一定要掌握使用编译器调试的技巧啊,这对于分析比较复杂的程序是很重要的

--------将学到的东西为我所用,这才是学习的目的 --------
2011-06-18 12:01
yangyuzhigua
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-14
收藏
得分:0 
回复 2楼 bccn_2012
你说我没有定义结构体student[]是在那个里面,我在上面的结构体里面定义了struct data *student了的吗!是不是在排序函数里面也要定义呢?
2011-06-18 14:34
快速回复:大家帮我来找一个错误,找了半天不知道哪里错了的。
数据加载中...
 
   



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

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