比较字符串类的功能无法正常工作

问题描述 投票:0回答:2

我想根据教授的姓名搜寻教授。所以我必须将我输入的名字与教授的名字进行比较。我尝试调试,但发生的情况是它没有放入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;
                    }
c++ class if-statement input string-comparison
2个回答
0
投票

(对不起,我无法评论)

您的名字比较似乎不错,所以也许您可以添加:

cout << "'" << name << "' vs '" << i.name << "' is " << name.compare(i.name) << endl;

否则,一个较小的完整示例将有所帮助(例如,删除您从stdin中填充的方式,仅使用固定值,删除循环,删除开关等)。每次简化后进行测试,这样您就可以找到导致问题的原因。


0
投票

错误的某些可能部分,以及不必要的代码:

  • 代替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;
}

© www.soinside.com 2019 - 2024. All rights reserved.