Не в состоянии принять «имя» в качестве ввода - PullRequest
0 голосов
/ 10 апреля 2020

Я думаю, что есть какая-то проблема типа. Может быть, я что-то упустил. Когда я ввожу выбор как 1, мне предоставляется «Введите имя: введите роль:», не имея возможности принять «имя» в качестве ввода. Я создал класс «Professor» с членами данных в виде 3 векторов типа string и «int count» вместе с тремя функциями-членами, такими как «Recruit», «DisplayInfo» и «Remove». Я в основном пытаюсь собрать данные профессоров колледжей.

    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>

    using namespace std;

    class Professor
    {
    private:
        vector<string> Name;
        vector<string> Role;
        vector<string>Subject;
        static int count1;
    public:
        void Recruit()
        {
            string name,role,subject;
            cout<<"Enter the Name: ";
            getline(cin, name);
            Name.push_back(name);

            cout<<"Enter the Role: ";
            getline(cin, role);
            Role.push_back(role);

            cout<<"Enter the Subject to be assigned: ";
            getline(cin, subject);
            Subject.push_back(subject);
            count1++;
        }
        void DisplayInfo()
        {
            //cout<<"\nName   Role   Subject\n";
            for(int i=0; i<count1; i++)
            {
                cout<<"Name: "<<Name[i]<<"\n";
                cout<<"Role: "<<Role[i]<<"\n";
                cout<<"Subject: "<<Subject[i]<<"\n";   
            }
            cout<<"\n\n";
        }
        void Remove()
        {
            string name, role, subject;
            cout<<"Enter the name of the Professor, his/her Role and the subject assigned to him/her: ";
            cin>>name>>role>>subject;
            for(int i=0; i<count1; i++)
            {
                if(Name[i]==name && Role[i]==role && Subject[i]==subject)
                {
                    vector<string>::iterator iter1 = find(Name.begin(), Name.end(), name);

                    if(iter1 == Name.end())
                    {
                        cout<<"";
                    }
                    else{
                        Name.erase(iter1);
                    }
                    vector<string>::iterator iter2 = find(Role.begin(), Role.end(), role);
                    if(iter2 == Role.end())
                    {
                        cout<<"";
                    }
                    else{
                        Role.erase(iter2);
                    }
                    vector<string>::iterator iter3 = find(Subject.begin(), Subject.end(), subject);
                    if(iter2 == Role.end())
                    {
                        cout<<"";
                    }
                    else{
                        Role.erase(iter2);
                    }
                }
            }
        }
    };

    int Professor :: count1;

    int main()
    {
        Professor p;
        int choice;
        do{
            cout<<"You have the following Choices:\n";
            cout<<"1) Recruit a Professor\n";
            cout<<"2) Display the Information about Professors\n";
            cout<<"3) Remove a Professor\n";
            cout<<"4) Quit\n";
            cout<<"\n\nEnter the choice:";

            cin>>choice;/*This is where it occurs. Code for "Recruit" member function is defined in 
                         "Professor" class above.*/

            switch(choice)
            {
                case 1:
                {
                    p.Recruit();
                    break; 
                }
                case 2:
                {
                    p.DisplayInfo();
                    break;
                }
                case 3:
                {
                    p.Remove();
                    break;
                }
                case 4:
                {
                    break;
                }
                default:
                {
                    cout<<"Sorry Wrong Choice!!\n";
                }
            }
        }while(choice!=4);
        return 0;
    }

1 Ответ

0 голосов
/ 10 апреля 2020

Привет, абхишек, проблема в getline. Я бы порекомендовал вам прочитать об использовании getline, просто добавьте следующую строку в функцию Recruit (), и ваша проблема будет решена

    void Recruit()
    {
        string name,role,subject;
        cout<<"Enter the Name: ";
        getline(cin, name);
        cin.ignore();
        Name.push_back(name);

        cout<<"Enter the Role: ";
        getline(cin, role);
        cin.ignore();
        Role.push_back(role);

        cout<<"Enter the Subject to be assigned: ";
        getline(cin, subject);
        cin.ignore();
        Subject.push_back(subject);
        count1++;
    }

. Привыкните использовать cin.ignore после getline. Счастливое кодирование

...