报错:
C:\Users\von\Desktop\查找书籍.c In function 'main':
32 15 C:\Users\von\Desktop\查找书籍.c [Error] incompatible type for argument 1 of 'findmax'
10 6 C:\Users\von\Desktop\查找书籍.c [Note] expected 'struct inf *' but argument is of type 'inf'
给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出样例:
25.00, Programming in Delphi
18.50, Programming in VB
代码
#include <stdio.h>
#define MAXN 10
typedef struct bookinf{
char* name;
int cost;
}inf;
inf booklist[MAXN];
inf* ptr=booklist;
int findmax (inf booklist[MAXN]){
int maxid =0;
for(int i=maxid+1;i<MAXN;i++){
int rec=maxid;
if(booklist[i].cost>booklist[maxid].cost){
maxid=i;
}
}
return maxid;
}
int main (int argc,const char*argv[]){
int number;
scanf("%d",&number);
for(int i=0;i<number;i++){
scanf("%s",&booklist[i].name);
scanf("%d",&booklist[i].cost);
}
int maxid=findmax(booklist[MAXN]);
printf("%s",booklist[maxid].name);
printf("%d",booklist[maxid].cost);
return 0;
}
因为第32行传入的参数是结构,而不是结构指针,所以报错了,可以改为传入booklist;
然后还有其他一些小问题需要修改,如书籍的价格需要使用double类型或者float类型,使用gets或fgets来读取书名等。
修改如下:
参考链接:
#include <stdio.h>
#define MAXN 10
typedef struct bookinf{
char name[30]; // 使用字符数组存储书名
double cost; // 使用double类型存储书籍价格
}inf;
inf booklist[MAXN];
inf* ptr=booklist;
int findmax (inf booklist[],int number){ // 使用传入结构指针 ,以寻找书籍价格最高的书籍下标
int maxid =0;
for(int i=1;i<number;i++){
// int rec=maxid;
if(booklist[i].cost>booklist[maxid].cost){
maxid=i;
}
}
return maxid;
}
int findmin (inf booklist[],int number){ // 使用传入结构指针 ,以寻找书籍价格最高的书籍下标
int minid =0;
for(int i=1;i<number;i++){
//int rec=minid;
if(booklist[i].cost<booklist[minid].cost){
minid=i;
}
}
return minid;
}
int main (int argc,const char*argv[]){
int number;
scanf("%d",&number);
for(int i=0;i<number;i++){
// gets("%s",booklist[i].name); //从输入获取字符串到字符数组,不需要前面的取址符
// https://baike.baidu.com/item/gets/787649?fr=aladdin
fflush(stdin); // 清除前面输入遗留在缓冲区的换行符,以免被gets读取到
gets(booklist[i].name); //因为要获取一行字符输入,所以使用gets代替scanf,获取使用fgets
scanf("%lf",&booklist[i].cost);
}
int maxid=findmax(booklist,number); // 传入书籍信息结构数组名即可,booklist[MAXN]是一个结构,不是结构指针
printf("%.2f, ",booklist[maxid].cost);
printf("%s\n",booklist[maxid].name);
int minid=findmin(booklist,number); // 传入书籍信息结构数组名即可,booklist[MAXN]是一个结构,不是结构指针
printf("%.2f, ",booklist[minid].cost);
printf("%s\n",booklist[minid].name);
return 0;
}