|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct pp
- {
- int flag;
- char id[10];
- 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[100000];
- scanf("%d%d%d",&N,&L,&H);
- getchar();
- int i,count[5]={0},j;
- int de_fen,cai_fen;
- for(i=0;i<N;i++)
- {
- scanf("%s %d %d",&kaosheng[i].id,&kaosheng[i].de,&kaosheng[i].cai);
- getchar();
- //对每一类分别标识
- de_fen = kaosheng[i].de;
- cai_fen = kaosheng[i].cai;
- if(de_fen>=H&&cai_fen>=H){
- count[0]++; //才德全尽
- kaosheng[i].flag=1;}
- else if(de_fen>=H&&cai_fen < H&&cai_fen>=L){
- count[1]++; //德胜才
- kaosheng[i].flag = 2;}
- else if(de_fen>=L&&de_fen<H&&cai_fen>=L&&cai_fen<H&&cai_fen<=de_fen){
- count[2]++; // 才德兼亡
- kaosheng[i].flag=3;}
- else if(de_fen>=L && cai_fen>=L){
- count[3]++; //其他的符合条件的
- kaosheng[i].flag=4;}
-
- }
- int sum_count = 0;//达标总人数
- for(i=0;i<4;i++) sum_count +=count[i];
- printf("%d\n",sum_count);
- decai temp[100000];
- //打印最后结果
- for(i=1;i<5;i++)// 类别
- {
- int l = 0;
- for(j=0;j<N;j++)//考生人数
- {
- if(kaosheng[j].flag==i)
- {
- temp[l++] = kaosheng[j];
- }
- }
- qsort(temp,count[i-1],sizeof(temp[0]),cmp);
- for(int k=0;k<count[i-1];k++)
- {
- printf("%s %d %d\n",temp[k].id,temp[k].de,temp[k].cai);
- }
- }
- return 0;
- }
复制代码 球球大家帮忙找找哪里写错了,还没等输入就程序自动退出不知为啥??
 
堆栈溢出了
windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
解决办法可以扩大栈空间的大小
也可以将decai kaosheng[100000];和decai temp[100000];移出main函数写成全局变量,就可以解决了
或者还可以改成申请内存释放内存那种,这种我也不太会
|
|