为什么用float在最小n处PTA答案错误

原题

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

问题相关代码
#include<stdio.h>
struct book{
    char name[31];
    double m;
};
int main(void)
{
    int x,i,max=0,min=0;
    scanf("%d",&x);
    getchar();
    struct book a[x];
    for(i=0;i<x;i++)
    {
        gets(a[i].name);
        scanf("%lf",&a[i].m);
        getchar();
        if(a[i].m>a[max].m)
        max=i;
        if(a[i].m<a[min].m)
        min=i;
    }
        printf("%.2f, %s\n",a[max].m,a[max].name);
        printf("%.2f, %s\n",a[min].m,a[min].name);
    return 0;    
}

正确,但如果float m,修改对应的输入格式,PTA显示最小n处错误

修改对应的输入格式,怎么修改?