去掉红色部分那两条语句就对了,不太明白为什么,自身给自身赋值不对吗

img

img

img

img

#include <stdio.h>
struct book{
char sm[31];
double jg;
}b[10];
main()
{
int x;
scanf("%d",&x);
getchar();
for(int i=0;i<x;i++)
{
gets(b[i].sm);
scanf("%lf",&b[i].jg);
getchar();
}
int max=0,min=0;
for(int i=0;i<x;i++)
{
b[max].jg=b[0].jg;
b[min].jg=b[0].jg;
if(b[i].jg>b[max].jg)
max=i;
if(b[i].jg<b[min].jg)
min=i;
}
printf("%.2lf, %s\n%.2lf, %s\n",b[max].jg,b[max].sm,b[min].jg,b[min].sm);
return 0;
}

这两句应该放循环外面
否则你的max和min保存不住了,每次都被0覆盖

你把它不要放循环里面

b[max].jg=b[0].jg; b[min].jg=b[0].jg; //这两条是赋值语句,没循环一次,就把 b[0].jg 值赋值给 b[max] ,所有记录循环结束,把数组里的价格值都改成了 b[0].jg 的值了。