我想根据教授的姓名搜寻教授。所以我必须将我输入的名字与教授的名字进行比较。我尝试调试,但发生的情况是它没有放入if(compare)语句中。我不知道为什么。它是一个很大的代码,所以我只包含其中一部分。 “教授”是教授类的向量,是类。
void RecruitProfessor()
{
Professor prof = Professor();
string college,name,role,subject;
cout<<"Enter the College Name: ";
fflush(stdin);
getline(cin, college);
cout<<"Enter the Professor Name: ";
getline(cin, name);
fflush(stdin);
cout<<"Enter the Professor Role: ";
getline(cin, role);
fflush(stdin);
cout<<"Enter the Professor Subject: ";
getline(cin, subject);
fflush(stdin);
prof.setCollegeName(college);
prof.setProfessorName(name);
prof.setProfessorRole(role);
prof.setProfessorSubject(subject);
professors.push_back(prof);
}
void DisplayProfessorInfo()
{
bool returnToMainMenu = false;
while(!returnToMainMenu)
{
cout<<"1. Fetch the details of all the professors \n";
cout<<"2. Fetch the details of professors by Name \n";
cout<<"3. Fetch the details of professors by Role \n";
cout<<"4. Fetch the details of professors by Subject \n";
cout<<"5. Fetch the details of professors by Colleges \n";
cout<<"6. Return to main menu \n";
Professor prof = Professor();
int choice;
cout<<"Please enter your choice:\n";
choice = getInt();
switch(choice)
{
case 1:
{
if(professors.size()==0)
{
cout<<"\n\nNo professors found!\n\n";
returnToMainMenu = true;
}
else
{
for(Professor i:professors)
{
//cout << i.getProfessorCollege() << endl;
cout<<"Professor College: " + i.getProfessorCollege() + "\n";
cout<<"Professor Name: " + i.getProfessorName() + "\n";
cout<<"Professor Role: " + i.getProfessorRole() + "\n";
cout<<"Professor Subject: " + i.getProfessorSubject() + "\n";
cout<<"\n\n";
}
}
break;
}
case 2:
{
string name;
if(professors.size()==0)
{
cout<<"\n\nNo professors sfound!\n\n";
returnToMainMenu = true;
}
else
{
getline(cin, name);
fflush(stdin);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
//cout<<name;
for(Professor i:professors)
{
if((name.compare(i.getProfessorName()))==0)
{
cout<<"Professor College: " + i.getProfessorCollege() + "\n";
cout<<"Professor Name: " + i.getProfessorName() + "\n";
cout<<"Professor Role: " + i.getProfessorRole() + "\n";
cout<<"Professor Subject: " + i.getProfessorSubject() + "\n";
cout<<"\n\n";
}
else{continue;}
}
}
break;
}
(对不起,我无法评论)
您的名字比较似乎不错,所以也许您可以添加:
cout << "'" << name << "' vs '" << i.name << "' is " << name.compare(i.name) << endl;
否则,一个较小的完整示例将有所帮助(例如,删除您从stdin中填充的方式,仅使用固定值,删除循环,删除开关等)。每次简化后进行测试,这样您就可以找到导致问题的原因。
错误的某些可能部分,以及不必要的代码:
choice = getInt();
,只需使用cin>>choice
;getline(cin, name);
fflush(stdin);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
使用上述getline()
之后甚至连另一个输入字符串或输入行都没有的情况。 (在呼叫cout
之后)
而不是使用cin>>name
。最初,当我在在线编译器上尝试时,包含这些行的代码无法正常工作。但是,现在,在使用简单的std::cin
删除那些代码之后,它仍然可以工作。
我根据您的代码制作了一个小的可复制示例,它可以正常工作:
#include <iostream>
#include <vector>
class Professor
{ public:
std::string name;
std::string getName()
{ return name; }
};
int main()
{ std::vector<Professor> professors;
Professor a,b,c;
a.name = "eerorika"; b.name = "S.S.Anne" ; c.name = "walnut";
professors.push_back(a);
professors.push_back(b);
professors.push_back(c);
int choice;
std::cin>>choice;
switch(choice)
{
case 1:
{ std::string profname;
std::cin>>profname;
if(professors.size()!=0)
for(Professor i:professors)
if(profname.compare(i.getName())==0)
std::cout<<"Professor name = "<<i.getName()<<"\n";
break;
}
case 2:
{ std::cout<<"Mystical";
break;
}
}
return 0;
}