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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
#1

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

19.06.2012, 02:53. Просмотров 588. Ответов 5
Метки нет (Все метки)

В программе в двух местах используеться 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++ Странное поведение
Странное поведение wstring C++
странное поведение указателя C++
Странное поведение new C++
Странное поведение cin C++
Странное поведение string C++
C++ Странное поведение указателей
C++ Странное поведение строки
Странное поведение cin C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,918
Записей в блоге: 17
19.06.2012, 03:09     Странное поведение getline #2
1. Проверь что возвращает при этом getline
2. Какое состояние потока после чтения?
3. Попробуй до вызва ф-ции вписать сточку:
C++
1
cin.sync();
grizlik78
Эксперт С++
 Аватар для grizlik78
1892 / 1424 / 105
Регистрация: 29.05.2011
Сообщений: 2,980
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
Сообщений: 150
19.06.2012, 03:14  [ТС]     Странное поведение getline #4
Спасибо огромное, cin.sync(); помогло. Если не секрет, для чего эта функция и почему она не нужна в первом случае, а во втором так необходима?
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,918
Записей в блоге: 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
Сообщений: 150
19.06.2012, 03:16  [ТС]     Странное поведение getline #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Скорее всего перед вторым getline где-то выполняется ввод с помощью оператора >>
C++
1
cin >> something;
Этот оператор оставляет символ перевода строки в буфере ввода. А getline первым символом считывает перевод строки и считает, что вводилась пустая строка.
Если так, то перед вторым getline надо считать из буфера один символ:
C++
1
cin.ignore();
Да, перед вторым getline производится ввод с помощью cin.
Ответ Создать тему
Опции темы

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