这一次为什么会报错?

报错:

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;
}

img