次のように定義された構造ブックと、構造ブックの配列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) を返し、作成者が "Author 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
理由がわかりません。どんな助けでも大歓迎です、ありがとう!