Проблема с принятием пустого места для строки в c

#c #string

#c #строка

Вопрос:

Я написал этот код, чтобы получить name. телефон и адрес человека, а затем я ввожу их в переменные объекта класса:

 #include<iostream>
#include<cstdlib>
#include<fstream>
#include<string>
using namespace std;

class contact{
public:
    string name;//ALL CLASS VARIABLES ARE PUBLIC
    unsigned int phonenumber;
    string address;

    contact(){//Constructor
        name= "Noname";
        phonenumber= 0;
        address= "Noaddress";
    }

    /*void input_contact_name(string s){//function to take contact name
        name=s;
    }
    void input_contact_number(int x){//function to take contact number
        phonenumber=x;
    }
    void input_contact_address(string add){//function to take contact address
        address=add;
    }*/
};

int main(){
    contact *d;
    d= new contact[200];
    string name,add;
    int choice;//Variable for switch statement
    unsigned int phno;
    static int i=0;//i is declared as a static int variable
    bool flag=false;
    cout<<"tWelcome to the phone Directoryn";//Welcome Message
    cout<<"Select :n1.Add New Contactn2.Update Existing Contactn3.Delete an Existing Entryn4.Display All Contactsn5.Search for a contactn6.Exit PhoneBooknnn";//Display all options
    cin>>choice;//Input Choice from user
    while(!flag){//While Loop Starts
        switch(choice){//Switch Loop Starts
        case 1:
            cout<<"nEnter The Namen";
            cin>>name;

            d[i].name=name;
            cout<<"nEnter the Phone Numbern";
            cin>>phno;
            d[i].phonenumber=phno;
            cout<<"nEnter the addressn";
            cin>>add;
            d[i].address=add;
            i  ;

            flag=true;
        }
    }
    return 0;
}
  

Однако, если я ввожу имя, разделенное его фамилией, код обходит следующие cin и завершает работу. Может ли кто-нибудь помочь мне объяснить, почему это происходит?
То же самое происходит, когда я ввожу 10-значный номер ячейки.
Заранее спасибо

Комментарии:

1. Пожалуйста, приложите некоторые усилия к форматированию вашего кода. Также было бы неплохо опубликовать более короткие образцы.

2. Спасибо Mat, я бы учел это в будущем: D

3. Я предлагаю вам принять ответ, данный ильджарном. Прошло некоторое время, и это правильный ответ.

Ответ №1:

Используйте std::getline() вместо operator>> для извлечения std::string содержащего пробел.

Комментарии:

1. Я задавался вопросом, в чем проблема с оператором>> и строками с пробелами?

2. operator>> считывает один элемент. Обычно считается, что элемент завершается следующим пробелом, как в случае std::string и всех примитивов. std::getline ваш друг, как говорится в ответе.