段错误一定是数组越界吗??写题的时候啥都没变,就改了定义结构体数组的位置就报错!!求大佬

上题是PTA团体程序设计天梯赛--练习题上的一道题,下面是给的用例

我的代码如下

#include <stdio.h>

typedef struct 
{
    float num;
    float price;
    float avg;
}CAKE;
CAKE cake[1010];
int main()
{
    int N,D;
    
    scanf("%d %d",&N,&D);
    
    for(int i=0;i<N;i++)
    {
        scanf("%f",&cake[i].num);
        
    }
    for(int i=0;i<N;i++)
    {
        scanf("%f",&cake[i].price);
        
    }
    for(int i=0;i<N;i++)
    {
        cake[i].avg=cake[i].price/cake[i].num;
        
        
    }
    for(int i=0;i<N-1;i++)//按单价降序排列
    {
        int k=i;
        for(int j=i+1;j<N;j++)
        {
            if(cake[j].avg>cake[k].avg)
            {
                k=j;
            }
        }
        CAKE temp=cake[k];//交换k和i
        cake[k]=cake[i];
        cake[i]=temp;
    }
    int i=0;
    float get=0;
    while(D)
    {
        
        if(D>=cake[i].num)
        {
            D-=cake[i].num;
            get+=cake[i].price;
            i++;
        }
        else
        {
            
            get+=D*cake[i].avg;
            D=0;
        }
    }
    printf("%.2lf",get);
        
    
}

我的思路就是把单价算出来,然后按单价从高到低排列依次分配数量就行

但是问题出在了定义结构体数组上,你看

 

当我把cake数组定义在main函数外面的时候,答案是这样的

等我移到这里时

答案是这样

但当我移到这个位置时,有趣的事情发生了

其他啥都没动,有没有大佬知道指导!!感激涕零!!

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值