c语言用结构数组查找书籍,查找最高和最低价格的书籍及价格

我的这个代码在自定义函数maxmin那里好像出了问题,没办法输出书名和价格,价格也没有比较,就是0.00,这出了什么问题


//查找书籍,从键盘输入10本书的名称和定价并存进结构数组中,从中查找定价最高和定价最低的名称和定价
#include<stdio.h> 
struct book{
    char name[10];
    double price;
};
void maxmin(int n,struct book s[]);
int main()
{    int n;
    n=2;
    struct book s[10];
    int i;
    printf("请输入书本的名称和价格\n");
    for(i=0;i<n;i++){
        printf("第%d本:",i+1); 
        scanf("%s%lf",s[i].name,&s[i].price);
    }
    maxmin(n,s);
    return 0; 
}
void maxmin(int n,struct book s[]){
    int max,min,i;
    max=s[0].price;
    for(i=0;i<n;i++){
        if(s[i].price>=max)
            max=s[i].price;
    }
    printf("其中价格最高的书籍是:%s%10.2lf",s[i].name,s[i].price); 
    min=s[0].price;
    for(i=0;i<n;i++){
        if(s[i].price<=min)
            min=s[i].price;
    }
    printf("其中价格最低的书籍是:%s%10.2lf",s[i].name,s[i].price); 
}

供参考:

//查找书籍,从键盘输入10本书的名称和定价并存进结构数组中,从中查找定价最高和定价最低的名称和定价
#include<stdio.h>
struct book{
    char name[10];
    double price;
};
void maxmin(int n,struct book s[]);
int main()
{
    int n;
    n = 2;
    struct book s[10];
    int i;
    printf("请输入书本的名称和价格\n");
    for(i = 0; i < n; i++){
        printf("第%d本:",i+1);
        scanf("%s%lf",s[i].name,&s[i].price);
    }
    maxmin(n,s);
    return 0;
}
void maxmin(int n,struct book s[])
{
    int max,min,i;
    max = 0;  //max=s[0].price;  修改
    min = 0;  //min=s[0].price;  修改
    for(i = 0; i < n; i++){
        if(s[i].price >= s[max].price) //修改
            max = i;   //max = s[i].price;修改
        if(s[i].price <= s[min].price) //修改
            min = i;   //min=s[i].price; 修改
    }
    printf("其中价格最高的书籍是:%s%10.2lf\n",s[max].name,s[max].price); //s[i].name,s[i].price 修改
    printf("其中价格最低的书籍是:%s%10.2lf\n",s[min].name,s[min].price); //s[i].name,s[i].price 修改
}

【以下回答由 GPT 生成】

问题已解决,问题在于 scanf 函数中的 %lf 格式符用于读取 double 类型的数据,但 %lf 只适用于 printf 函数,而在 scanf 函数中应使用 %lf 格式符对应的 %f 来读取 double 类型的数据。

以下为优化后的代码:

#include <stdio.h>

struct book{
    char name[10];
    double price;
};

void maxmin(int n, struct book s[]);

int main()
{
    int n;
    n = 2;
    struct book s[10];
    int i;
    printf("请输入书本的名称和价格\n");
    for(i = 0; i < n; i++){
        printf("第%d本: ", i+1);
        scanf("%s %lf", s[i].name, &s[i].price);
    }
    maxmin(n, s);
    return 0;
}

void maxmin(int n, struct book s[]){
    int max_index = 0, min_index = 0, i;

    for(i = 0; i < n; i++){
        if(s[i].price >= s[max_index].price)
            max_index = i;
    }
    printf("价格最高的书籍是: %s,价格为: %.2lf\n", s[max_index].name, s[max_index].price);

    for(i = 0; i < n; i++){
        if(s[i].price <= s[min_index].price)
            min_index = i;
    }
    printf("价格最低的书籍是: %s,价格为: %.2lf\n", s[min_index].name, s[min_index].price);
}

请尝试运行优化后的代码,查看是否解决了问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^