Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

[C++] Проблема с функцией getline() в классе!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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()!
Подскажите пожалуйста как можно решить эту проблему!
_________________
Стиль должен быть во всем, даже в мелочах...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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;
                }


то при выводе пропадает первая буква, то есть если я введу имя Иванов Иван, то выводится только ванов Иван! Происходит это только при вводе данных о первом сотруднике, далее все ок!
Как можно решить эту проблему?
_________________
Стиль должен быть во всем, даже в мелочах...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...