谢谢帮忙看看哪里写错了,找找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:}
{:10_257:} {:10_269:}不会呀
堆栈溢出了
windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
解决办法可以扩大栈空间的大小
也可以将decai kaosheng;和decai temp;移出main函数写成全局变量,就可以解决了
或者还可以改成申请内存释放内存那种,这种我也不太会 战机智 发表于 2021-6-20 14:12
堆栈溢出了
windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
谢谢啦!!强啊!!!{:10_266:} {:10_266:} 新人来向大佬学习 向大佬学习 向大佬学习{:10_281:} {:10_270:}{:10_270:}{:10_270:}
页:
[1]