У меня проблемы с пониманием связанных списков. Я пытаюсь распечатать на стандартный вывод все элементы списка, но распечатывается только последняя запись. Я не уверен, что не так с моим кодом. Я считаю, что указатель заголовка хранит только одну запись и перезаписывается каждый раз, когда я помещаю данные в новую запись, но я не знаю, в чем конкретно заключается проблема, и я не знаю, как ее исправить, потому что не могу Посмотрите, где код не так. Пожалуйста, дайте мне знать, если вы видите проблему с моим кодом, и как я могу ее исправить. Спасибо.
Моя основная функция int мала, но я считаю, что вся необходимая информация есть. Вот мой основной int:
int main(void){
sPtr head;
head=NULL;
cout<<putIntoList(head);
system("pause");
return 0;
}
Структура выглядит следующим образом:
struct drugData{
string name;
string disease;
int effectiveness;
drugData *next;
drugData(){
effectiveness=0;
name="n";
disease="n";
next=NULL;
}
}
А вот typedef для использования с типами drugData в качестве параметров функции.
typedef drugData* sPtr;
Это первая функция, которая считывает данные из файла в поля структуры drugData.
void putIntoList(sPtr &head){
(code to open file is located here)
sPtr structPointer=new drugData;
while (!inFile.eof()){
getline(inFile,tempDrugName, ',');
getline(inFile,tempDisease,',');
inFile>>tempEff;
structPointer->name=tempDrugName;
structPointer->disease=tempDisease;
structPointer->effectiveness=tempEff;
cout<<"Drug:"<<structPointer->name;
approvalGetter(structPointer);//This function asks the user for input on each drug.
}
headInsert(structPointer, head);//This function inserts new objects at head.
menuOptions(structPointer, head);//This function presents a menu to either print, search, or quit.
inFile.close();
}//End of putIntoList function.
Вот код функции headInsert:
void headInsert(sPtr &newItem, sPtr& head){
newItem->next=head;
head=newItem;
newItem=NULL;
}
А вот код для функции menuOptions:
void menuOptions(sPtr& pointer, sPtr& head){
int menuAnswer=0;
cout"Choose a menu option:"<<endl<<"(1) Print"<<endl<<"(2) Search"<<endl<<"(3) Quit"<<endl;
cin>>menuAnswer;
if (menuAnswer==1){
for (pointer=head; pointer!=NULL; pointer=pointer->next){
cout<<pointer->drugName;
}
}//Included here is the menu options 2 and 3.
}
Я ожидаю, что на выходе появятся названия лекарств, содержащихся в файле, а их шесть, но единственный вывод, который я вижу, - это название последнего лекарства в файле.