Почему моя функция printList печатает только последний элемент в связанном списке? - PullRequest
0 голосов
/ 03 апреля 2019

У меня проблемы с пониманием связанных списков. Я пытаюсь распечатать на стандартный вывод все элементы списка, но распечатывается только последняя запись. Я не уверен, что не так с моим кодом. Я считаю, что указатель заголовка хранит только одну запись и перезаписывается каждый раз, когда я помещаю данные в новую запись, но я не знаю, в чем конкретно заключается проблема, и я не знаю, как ее исправить, потому что не могу Посмотрите, где код не так. Пожалуйста, дайте мне знать, если вы видите проблему с моим кодом, и как я могу ее исправить. Спасибо.

Моя основная функция 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.
}

Я ожидаю, что на выходе появятся названия лекарств, содержащихся в файле, а их шесть, но единственный вывод, который я вижу, - это название последнего лекарства в файле.

...