在这个函数中我使用了2个条件,对于响应== 1,指针由注册号返回,并且该函数工作得很好,另一方面,如果响应== 2,指针由字符串名称返回,如果它采用新的输入名称,但随后程序突然结束,
我添加了指针返回功能和编辑功能!请帮忙
// edit student function , helping functions , pointer by registration and name
// at end
void LAB_PROJECT::edit_student()
{
int response = 0;
string search_name;
int search_reg = 0;
cout << "\n \n -- Select Search Option 1 or 2 Accordingly" << endl;
cout << "\n 1--Registration ";
cout << "\n 2--Student's Name" << " >> " ;
cin >> response;
if (response==1)
{
cout << "\n \n Enter Registration No: ";
cin >> search_reg;
Node*temp1;
temp1 = pointer_by_registration(search_reg);
cin.ignore(1,'\n');
string new_name;
cout << "\n \n Enter New Name ";
getline(cin,new_name,'\n');
temp1->student_name = new_name;
return;
}
else if(response==2)
{
cout << "\n \n Enter Student's Name , that you want to search " << endl;
getline(cin,search_name,'\n');
cin.ignore(1,'\n');
Node*temp2;
temp2 = pointer_by_name(search_name);
string new_name;
cout << "\n \n Enter New Name";
getline(cin,new_name,'\n');
cin.ignore(1,'\n');
temp2->student_name=new_name;
return;
}
}
Node* LAB_PROJECT::pointer_by_name(string getin)
{
string checker;
checker = getin;
Node*temp1;
temp1 = startptr;
while(temp1 != NULL)
{
if (checker == temp1->student_name)
{
return (temp1);
}
temp1=temp1->nextptr;
}
}
Node* LAB_PROJECT::pointer_by_registration(int reg_key)
{
int key = 0;
key = reg_key;
Node* temp1;
temp1 = startptr;
while(temp1 !=NULL)
{
if(key == temp1->registration)
{
return(temp1);
}
temp1=temp1->nextptr;
}
}
答案 0 :(得分:0)
我在这里看到的唯一一件事是你的两个搜索功能中未定义的行为:
Node* LAB_PROJECT::pointer_by_registration(int reg_key);
Node* LAB_PROJECT::pointer_by_name(string getin);
在这两种情况下,如果未找到搜索条件,则不返回值。你的编译器应该给你一个警告。我希望你能回复NULL
。
哦,我想我应该补充一点,你真的需要测试NULL
,而不是假设函数返回了一个有效的指针。
答案 1 :(得分:0)
我发现了问题,Pointer_by_name的代码很好,
问题是我在
之后输入了cin.ignore(1,'\n');
`cout << "\n \n Enter New Name";`
getline(cin,new_name,'\n');`
该名称的最后一个字符从流行中刷新,它返回了一个NULL指针,但该程序在使用时与其他函数一起冻结,现在效果非常好......对所有人都感谢!