Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

19.06.2012, 02:53. Просмотров 635. Ответов 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;
}
Я что то не так делаю? В интернете не нашол внятной, развернутой теории.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 02:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странное поведение getline (C++):

Интересное поведение cin.getline(); - C++
Доброго времени суток! Я не устаю терроризировать форум своими тупыми вопросами, но для этого он и создан. На этот раз у меня проблема с...

Странное поведение - C++
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки,...

Странное поведение new - C++
Объясните почему оператор new выделяет неверное количество памяти? # include <iostream> using namespace std; char* interpitator( int...

Странное поведение указателей - C++
Здравствуйте, может кто-нибудь объяснить столь странное поведение указателя. Вот код. int main() { const int Width = 3; ...

Странное поведение присваивания - C++
class Lexem { public: uint id; uint value; uint line; uint pos; bool operator==(int a){ return a...

Странное поведение компилятора - C++
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в...

5
Avazart
Эксперт С++
7237 / 5433 / 304
Регистрация: 10.12.2010
Сообщений: 24,152
Записей в блоге: 17
19.06.2012, 03:09 #2
1. Проверь что возвращает при этом getline
2. Какое состояние потока после чтения?
3. Попробуй до вызва ф-ции вписать сточку:
C++
1
cin.sync();
1
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
19.06.2012, 03:12 #3
Скорее всего перед вторым getline где-то выполняется ввод с помощью оператора >>
C++
1
cin >> something;
Этот оператор оставляет символ перевода строки в буфере ввода. А getline первым символом считывает перевод строки и считает, что вводилась пустая строка.
Если так, то перед вторым getline надо считать из буфера один символ:
C++
1
cin.ignore();
1
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 151
19.06.2012, 03:14  [ТС] #4
Спасибо огромное, cin.sync(); помогло. Если не секрет, для чего эта функция и почему она не нужна в первом случае, а во втором так необходима?
0
Avazart
Эксперт С++
7237 / 5433 / 304
Регистрация: 10.12.2010
Сообщений: 24,152
Записей в блоге: 17
19.06.2012, 03:16 #5
Думаю по той причине что указал grizlik78

http://www.cplusplus.com/reference/iostream/istream/sync/
http://www.cplusplus.com/reference/iostream/istream/ignore/
1
19.06.2012, 03:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 03:16
Привет! Вот еще темы с ответами:

Странное поведение кода - C++
int x; cout << (x = 1) + (x = 2) + (x = 3); У меня выводит 7 (вместо 6). Почему?!?!

Странное поведение транслятора - C++
В следуюшем примере код компилируется нормально, но объект класса b не содается (пробывал на Visual studio 10 и на Borland builder 5), что...

Странное поведение программы - C++
Здравствуйте, у меня проблема. В силу какой-то причины результатом вычисления выражения при значениях PA и PB равных 0 и 1 соответственно,...

Странное поведение string - C++
Здравствуйте. Сейчас я пытаюсь скомпилировать под Windows проект, который ранее писался под Linux. Делаю я это с помощью MinGW от...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.