Учитывая структуру книга определяется следующим образом и массив 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] , Поэтому, учитывая автора «Автор1», функция должна возвращать 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;}
}
Я попытался запустить код с приведенным выше примером, автором = «Author1» и продолжал получать неправильный вывод. Функция всегда возвращает 55
вместо 90
, и я не могу понять, почему. Любая помощь приветствуется, спасибо!
О, я вижу, спасибо! Можете ли вы рассказать мне, как меняются члены lib в моем коде? – drawar
Добро пожаловать. Предполагая, что 'lib' является глобальной переменной, строка' lib [i] = * (lib [i] .nextedition) ', похоже, изменит ее. – simonc
У меня получилось, спасибо, что поняли, что для меня! – drawar