我的这个代码在自定义函数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);
}
请尝试运行优化后的代码,查看是否解决了问题。
【相关推荐】