Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 15.10.2015
Сообщений: 60

Опять про cin.getline и невызов

14.02.2017, 19:16. Показов 711. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я знаю, что вопрос много раз поднимался, но везде ссылки или описания типа делай так и все - это я читал... Вот фрагмент кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
baby1.setData();
baby2.setData();
...
 
void Children::setData() {
    cout << "Input name: ";
    cin.getline(name, 10);  
    cout << "Input family: ";
    cin.getline(family, 20);
    cout << "Input age: ";  
    cin >> age;     
}
собственно, baby1 проходит нормально, а вот с baby2 cin.getline(name, 10); уже не вызывается (принт приложил).
И почему, если добавить в конце после cin >> age - cin.get(); то все вызывается нормально?
2. Сюда же, cin.ignore(); - все тоже работает, а вот cin.sync() - нет. Почему? Ведь после предыдущего getline остается \n?

p.s. и поправьте - если все cin - то проблем нет, но тут я так понимаю смысл в объектном вводе - объект кончился, поток пустой (?), а вот с буферами/потоками и символами, что там остаются - я прочитал все описания функций, разъяснения, но никак не могу догнать принцип, ни на английском, ни на русском. У Шилдта и Прата тоже все легко описано теорией, а смысл никак не ложиться.
Миниатюры
Опять про cin.getline и невызов  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2017, 19:16
Ответы с готовыми решениями:

Вопрос про cin.getline()
char mas; cout&lt;&lt;&quot;Add Age &quot;; cin&gt;&gt;Age; cout&lt;&lt;&quot;Add Name &quot;; cin.getline(mas,20); Name = new char; strcpy(Name,...

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть какие-нибудь замечания, то просьба написать что не...

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с тремя параметрами, как из потока достать...

5
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.02.2017, 19:53
Цитата Сообщение от badvik Посмотреть сообщение
а вот cin.sync() - нет. Почему?
Потому, что этот способ не везде работает.
Цитата Сообщение от badvik Посмотреть сообщение
Ведь после предыдущего getline остается \n?
После getline() '\n' не остаётся.
http://www.cplusplus.com/refer... m/getline/
Цитата Сообщение от badvik Посмотреть сообщение
но никак не могу догнать принцип,
Вот здесь:
Цитата Сообщение от badvik Посмотреть сообщение
cin >> age;
в потоке ввода остаётся '\n', который, для следующих getline() (при вызове baby2.setData()), будет пустой строкой, поэтому будет пропускаться ввод. Вот и весь принцип.
Распространенные ошибки
1
3 / 3 / 0
Регистрация: 15.10.2015
Сообщений: 60
15.02.2017, 18:50  [ТС]
а почему тогда оставив cin.get() в конце первого ввода, потом все работает нормально, но при этом сама функция не вызвается? Она, получается, вызывается, "поглощает" оставшийся после cin "\n"?

p.s. по ссылке один из вариантов как раз cin.sync(), сбрасывает остаток строки, почему тогда в моем фрагменте он не работает?

p.p.s. а есть ли возможность, как дебуггером, например, отследить что происходит с буфером ввода и как считывается ввод? Так будет очень легко понять все эти вариации getов
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
15.02.2017, 18:57
Цитата Сообщение от badvik Посмотреть сообщение
а почему тогда оставив cin.get() в конце первого ввода, потом все работает нормально,
В конце первого ввода - это где? cin.get() убирает '\n' из потока, остающийся там после cin >> age.
Цитата Сообщение от badvik Посмотреть сообщение
но при этом сама функция не вызвается?
Где и что не вызывается?
Цитата Сообщение от badvik Посмотреть сообщение
p.s. по ссылке один из вариантов как раз cin.sync(), сбрасывает остаток строки, почему тогда в моем фрагменте он не работает?
Написал уже:
Цитата Сообщение от nd2 Посмотреть сообщение
Потому, что этот способ не везде работает.
0
3 / 3 / 0
Регистрация: 15.10.2015
Сообщений: 60
15.02.2017, 19:19  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
В конце первого ввода - это где? cin.get() убирает '\n' из потока, остающийся там после cin >> age.
да, я неправильно выразился, имелось в виду, что если добавить cin.get() в конце блока, то при вызове второй раз, все пройдет нормально, т.к. гет уберет символ новой строки из потока.

Цитата Сообщение от nd2 Посмотреть сообщение
Где и что не вызывается?
Тоже не по-русски написал, прошу прощения - функция cin.get() вызвается, но пользователь это не видит и ничего не вводит, т.к. она вызывается, сама же поглощает '\n' и заканчивает работу. Правильно я понимаю?

Цитата Сообщение от nd2 Посмотреть сообщение
Написал уже:
я видел, спасибо. Хотелось бы понять, почему.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
15.02.2017, 19:31
Цитата Сообщение от badvik Посмотреть сообщение
Правильно я понимаю?
Правильно.

Добавлено через 51 секунду
Цитата Сообщение от badvik Посмотреть сообщение
Хотелось бы понять, почему.
Создай тему.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2017, 19:31
Помогаю со студенческими работами здесь

Объясните работу методов cin.getline и cin.ignore
Фрагмент программы ниже. Что делают cin.getline и cin.ignore (12-13 строки) void WorkWithBooks(int Books) { if (Books &gt; 0) ...

Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет...

Отличие getline() от cin.getline()
Чем отличается getline() от cin.getline() ?

cin.getline и cin.ignore
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for....

Не работает ни cin.Get(), ни cin.Getline()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include &quot;string.h&quot; using namespace::std; const...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru