c语言数据结构 在数据不参与计算的情况下改变数据类型得出的答案不一样

在数据不参与计算的情况下改变数据类型得出的答案不一样

#include
#include
typedef struct
{
    int num;
    double store;
}stu;
void change(stu*x,stu*y)
{
    stu temp;
    temp=*x;
    *x=*y;*y=temp;
}

int order(double x, double y)
{
    int c;
    if(x>y) c=0;
    if(c==0)
    return 1;
    else return 0;
}
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    stu stu[n];
    for(int i=0;iscanf("%d %lf",&stu[i].num,&stu[i].store);
    }
    for(int i=0;i-1;i++)
    {
        for(int j=0;j-1;j++)
        {
            int d=order(stu[j].store,stu[j+1].store);
            if(d==1) 
            {
                change(&stu[j],&stu[j+1]);
            }
        }
    }

printf("%d %g",stu[k-1].num,stu[k-1].store);
    
}

将上面结构体中的int 改成long 或者将double改成float 最后的答案会不一样,输入的数据都符合要求。

应该是change函数里面的结构体指针出了问题,但是不知道怎么改