#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
ваш друг, как говорится в ответе.