八戒253 发表于 2021-6-20 09:42:51

谢谢帮忙看看哪里写错了,找找BUG




#include <stdio.h>
#include <stdlib.h>
typedef struct pp
{
        int flag;
        char id;
        int de;
        int cai;
}decai;
int cmp(const void *a,const void *b)
{
        struct pp *aa = (struct pp *)a; //为啥我这里写 decai*aa = (decai*)a; 就编译报错??
        struct pp *bb = (struct pp *)b;
        if(aa->de != bb->de)
        {
                return bb->de -aa->de;
        }
        else
        {
                return bb->cai-aa->cai;
        }
}
int main()
{
        int N,L,H;
        decai kaosheng;
        scanf("%d%d%d",&N,&L,&H);
        getchar();
        int i,count={0},j;
        int de_fen,cai_fen;
        for(i=0;i<N;i++)
        {
                scanf("%s %d %d",&kaosheng.id,&kaosheng.de,&kaosheng.cai);
                getchar();
                //对每一类分别标识
                de_fen = kaosheng.de;
                cai_fen = kaosheng.cai;
                if(de_fen>=H&&cai_fen>=H){
                        count++;                                //才德全尽
                        kaosheng.flag=1;}
                else if(de_fen>=H&&cai_fen < H&&cai_fen>=L){
                        count++;                                //德胜才
                        kaosheng.flag = 2;}
                else if(de_fen>=L&&de_fen<H&&cai_fen>=L&&cai_fen<H&&cai_fen<=de_fen){
                        count++;                // 才德兼亡
                        kaosheng.flag=3;}
                else if(de_fen>=L && cai_fen>=L){
                        count++;                        //其他的符合条件的
                        kaosheng.flag=4;}
               
        }
        int sum_count = 0;//达标总人数
        for(i=0;i<4;i++) sum_count +=count;
                printf("%d\n",sum_count);
        decai temp;
        //打印最后结果
        for(i=1;i<5;i++)// 类别
        {
                int l = 0;
                for(j=0;j<N;j++)//考生人数
                {
                        if(kaosheng.flag==i)
                        {
                                temp = kaosheng;
                       }
                }
                qsort(temp,count,sizeof(temp),cmp);
                for(int k=0;k<count;k++)
                {
                        printf("%s %d %d\n",temp.id,temp.de,temp.cai);
                }
        }
        return 0;
}球球大家帮忙找找哪里写错了,还没等输入就程序自动退出不知为啥??
{:10_266:}{:10_282:}

懒狗李 发表于 2021-6-20 11:36:08

{:10_257:}

夏三笙 发表于 2021-6-20 13:10:06

{:10_269:}不会呀

战机智 发表于 2021-6-20 14:12:15

堆栈溢出了
windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。

解决办法可以扩大栈空间的大小
也可以将decai kaosheng;和decai temp;移出main函数写成全局变量,就可以解决了
或者还可以改成申请内存释放内存那种,这种我也不太会

八戒253 发表于 2021-6-20 14:46:30

战机智 发表于 2021-6-20 14:12
堆栈溢出了
windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。



谢谢啦!!强啊!!!{:10_266:}

16beat 发表于 2021-6-20 15:06:08

{:10_266:}

Dragon910623 发表于 2021-6-21 13:13:25

新人来向大佬学习

moskiller 发表于 2021-6-21 14:58:56

向大佬学习

kevin.zhou 发表于 2021-6-25 14:05:02

向大佬学习{:10_281:}

大个石头 发表于 2021-6-27 19:13:10

{:10_270:}{:10_270:}{:10_270:}
页: [1]
查看完整版本: 谢谢帮忙看看哪里写错了,找找BUG