我的班级要求的程序能够插入项目(此任务正在运行)并对其进行评估。问题是当我尝试进行评估时,程序只是删除整个列表,我不知道为什么。这是评估功能:
No * evaluate(No * head){
int projectID;
cout<<"What is the ID?\n";
cin >> projectID;
while (head != NULL)
{
if (head->ID == projectID){
int evaluation;
cout<<"Please insert the evaluation \n";
cin >> evaluation;
head->evaluation = evaluation;
}
head = head->next;
}
return head;
}
这是我的结构:
typedef struct dados {
int ID;
int evaluation;
struct dados *next; //pointer to next node
}No;
要调用我使用的功能:
int main(){
No * ll = NULL;
while (true){
int ID;
cout << "Please insert the ID \n";
cin >> ID;
ll = insertFront(id);
ll = evaluate(head);
}
}
答案 0 :(得分:0)
问题是你在评估函数中执行while循环,直到head达到NULL:
while (head != NULL)
然后,在退出while循环后返回评估函数(因此head现在为NULL)并返回head:
return head; // <== will always return NULL
最后你在main中的列表指针中设置它:
ll = evaluate(head); // ll will be null
如果evaluate()
返回指向列表的指针或指向找到的节点的指针,那么我并不完全清楚。
如果找到了节点,最简单的方法是在您更新节点后立即从该功能返回:
...
if (head->ID == projectID){
... (as before)
return head; <<=== add this line
}
如果它位于列表的开头,那么您只需要在函数开头的临时值中保存head
,并返回此临时变量而不是{{1} }。
head