Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Jester
Зарегистрирован: 01.08.2006 Сообщения: 12 Откуда: Россия, Москва
|
Добавлено: Вт Авг 15 2006 01:34 Заголовок сообщения: [C++] Проблема с функцией getline() в классе! |
|
|
Проблема заключается в следующем, при исрользовании фнукции getline() просто в коде, проблем не вызывает, но если ее использовать в классе, то начинаются какие-то чудеса!
Я приведу пример кода:
class employee
{
private:
string name;
long number;
public:
void getdata()
{
cout <<"\nVvedite imya:";
/* ДАЛЕЕ ПРОИСХОДЯТ ЧУДЕСА */
getline(cin, name);
////////////////////////////
cout <<"Vvedite nomer:";
cin >>number;
}
};
void main()
{
employee emparr[100];
int n =0;
char ch;
do
{
cout <<"\nVvedite imya sotrudnika s nomerom " <<n+1;
emparr[n++].getdata();
cout <<"Prodoljit' (y/n)?";
cin >> ch;
} while(ch !='n');
getch();
}
Я использую функцию getline для того, чтобы ввести имя сотрудника с пробелом (пример: Иванов Иван). Программа позволяет мне ввести имя и номер сотрудника один раз, затем она просто зацикливается и похоже, что она просто игнорирует вызов метода getdata()!
Подскажите пожалуйста как можно решить эту проблему! _________________ Стиль должен быть во всем, даже в мелочах... |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Вт Авг 15 2006 14:33 Заголовок сообщения: Re: [C++] Проблема с функцией getline() в классе! |
|
|
Jester писал(а): | ...но если ее использовать в классе, то начинаются какие-то чудеса!.... |
класс тут не причём... если Вы сделаете подряд вызовы строки-числа-строки-числа-строки и т.д.. то заметите эту особенность так же. Связано с тем, что при считывании числа Вы жмахаете на клавишу ввода - что является ышо одним символом в стандартном потоке, но не может быть интерпретировано как число. При последующем чтении с потока ввода гэтлайн честно Вам возвращает перевод каретки (что в свою очередь детектируется указанной функцией как разделитель).
Один из способов решения - очистить поток ввода перед его чтением (к минусу данного подхода мона отнести проблемы связанные с внешними, по отношению к коду, перенаправлениями ввода). Тогда метод Вашего класса будет выглядить приблизительно следующим макаром...
Код: |
void getdata()
{
cout <<"\nVvedite imya:";
cin.ignore();
/* ДАЛЕЕ ПРОИСХОДЯТ ЧУДЕСА */
getline(cin, name);
////////////////////////////
cout <<"Vvedite nomer:";
cin >>number;
}
|
с уважением
(круглый) |
|
Вернуться к началу |
|
|
Jester
Зарегистрирован: 01.08.2006 Сообщения: 12 Откуда: Россия, Москва
|
Добавлено: Вт Авг 22 2006 02:19 Заголовок сообщения: |
|
|
kolobok0, спасибо все отлично работает! Но появилась небольшая проблема, если я в класс добавлю функцию вывода информации:
Код: |
void vivod()
{
cout << "Imya: " << name << endl;
cout << "Nomer: " << number << endl;
}
|
то при выводе пропадает первая буква, то есть если я введу имя Иванов Иван, то выводится только ванов Иван! Происходит это только при вводе данных о первом сотруднике, далее все ок!
Как можно решить эту проблему? _________________ Стиль должен быть во всем, даже в мелочах... |
|
Вернуться к началу |
|
|
|