Форум программистов, компьютерный форум CyberForum.ru

Странное поведение getline - C++

Восстановить пароль Регистрация
 
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 146
19.06.2012, 02:53     Странное поведение getline #1
В программе в двух местах используеться getline. В первом случае все супер :
C++
1
2
string ownerName;
    getline (cin, ownerName);
А во втором, не дает ввести значение и просто заполняет строку "ничем" :
C++
1
2
3
string patName;
        getline (cin, patName);
        objPat[i].SetName(patName);
C++
1
2
3
4
void Pat::SetName (string name)
{
    patName=name;
}
Я что то не так делаю? В интернете не нашол внятной, развернутой теории.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 02:53     Странное поведение getline
Посмотрите здесь:

C++ Интересное поведение cin.getline();
C++ Странное поведение транслятора
C++ Странное поведение компилятора
C++ Странное поведение
Странное поведение new C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
19.06.2012, 03:09     Странное поведение getline #2
1. Проверь что возвращает при этом getline
2. Какое состояние потока после чтения?
3. Попробуй до вызва ф-ции вписать сточку:
C++
1
cin.sync();
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
19.06.2012, 03:12     Странное поведение getline #3
Скорее всего перед вторым getline где-то выполняется ввод с помощью оператора >>
C++
1
cin >> something;
Этот оператор оставляет символ перевода строки в буфере ввода. А getline первым символом считывает перевод строки и считает, что вводилась пустая строка.
Если так, то перед вторым getline надо считать из буфера один символ:
C++
1
cin.ignore();
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 146
19.06.2012, 03:14  [ТС]     Странное поведение getline #4
Спасибо огромное, cin.sync(); помогло. Если не секрет, для чего эта функция и почему она не нужна в первом случае, а во втором так необходима?
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
19.06.2012, 03:16     Странное поведение getline #5
Думаю по той причине что указал grizlik78

http://www.cplusplus.com/reference/i.../istream/sync/
http://www.cplusplus.com/reference/i...stream/ignore/
Yandex
Объявления
19.06.2012, 03:16     Странное поведение getline
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 146
19.06.2012, 03:16  [ТС]     Странное поведение getline #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Скорее всего перед вторым getline где-то выполняется ввод с помощью оператора >>
C++
1
cin >> something;
Этот оператор оставляет символ перевода строки в буфере ввода. А getline первым символом считывает перевод строки и считает, что вводилась пустая строка.
Если так, то перед вторым getline надо считать из буфера один символ:
C++
1
cin.ignore();
Да, перед вторым getline производится ввод с помощью cin.
Ответ Создать тему
Опции темы

Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru