给定结构 book 定义如下,结构书的数组 lib :
struct Book{
char title[100];
char author[100];
int price;
struct Book *nextedition;
};
struct Book lib[1000];
我将编写一个函数来计算给定作者的书籍总价,包括他书的未来版本的所有书籍,即使该未来版本的作者不是指定的作者。
title author price nextedition
----------------------------------
0 Book1 Author1 25 &lib[2]
1 Book2 Author2 20 NULL
2 Book3 Author3 30 &lib[3]
3 Book4 Author1 35 NULL
对于上面的例子,lib [2]上的书是lib [0]的下一版,lib [4]上的书是lib [2]的下一版。因此,给定作者“Author1”,函数应返回90(= 25 + 30 + 35),并且给作者“作者3”,该函数应返回65(= 30 + 35)。
所以这是我的代码:
int firstEdition(char author[100]){
int i, pos=-1;
for(i=0;i<numbooks;i++)
if(strcmp(lib[i].author,author)==0){
pos=i;
if(pos>=0) return pos;
}
return -1;
}
int totalPrice(char author[100]){
int price=0;
int i=firstEdition(author);
if (i<0)
return 0;
else {
while (lib[i].nextedition != NULL){
price+=lib[i].price;
lib[i]=*(lib[i].nextedition);
}
return price;}
}
我已经尝试使用上面的示例和author =“Author1”运行代码并继续输出错误的输出。该函数始终返回55
而不是90
,我似乎无法弄清楚原因。感谢任何帮助,谢谢!
答案 0 :(得分:1)
totalPrice
的实施会在考虑列表中最后一本书的价格之前退出其while
循环。它也改变了lib
的一些成员,这显然不可取。
以下(未经测试的)代码应该为您提供正确的price
,而不会更改lib
的状态
int totalPrice(char author[100]){
int price=0;
int i=firstEdition(author);
struct Book *book;
if (i<0)
return 0;
book = &lib[i];
while (book != NULL) {
price+=book->price;
book = book->nextedition;
}
return price;
}