|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.08.2014, 23:41 | #1 |
Пользователь
Регистрация: 09.10.2011
Сообщений: 11
|
Некорректно работает функция getline()
Здравствуйте, у меня возник вот такой вопрос. Сижу решаю задания по книге Лафоре "Объектно-ориентированное программирование на С++" и наткнулся на одну непонятность. в качестве решения 2 задачи в главе 7 соорудил данную программку:
Код:
Последний раз редактировалось GooderSteel; 27.08.2014 в 23:53. |
28.08.2014, 08:10 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А почему не cin>>name? Почему getline() используешь?
I'm learning to live...
|
28.08.2014, 08:54 | #3 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Потому что getline считывает строку. Строка заканчивается символом \n или \0, наверное.
Если первый символ в буфере клавиатуры \n, то getline считает пустую строку. Вот так она у тебя и работает. Это правильное поведение. Request:cin >> answer; Оператор >> считывает до тех пор, пока не встретит символ-разделитель. При этом сам разделитель (в том числе \n) остается в буфере. И тут ты вызываешь getline, который его считывает. Короче ты делаешь что-то не так. Код:
Последний раз редактировалось Stilet; 28.08.2014 в 09:50. |
28.08.2014, 09:51 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
28.08.2014, 10:46 | #5 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
cin тут не при чем вроде бы, этож просто поток. Если винить, то оператор >>, но я думаю что он так и должен работать - удобно например строку на слова разделять... Ну если уж очень хочется - имхо можно перегрузить свой оператор и реализовать как угодно.... |
|
28.08.2014, 11:51 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Или еще лучше для cin настроить некое свойство - конец строки. Вот типа setprecios() (или как оно там правильно называется) для cout сделали бы, чтоб можно было разделитель строки задавать, было бы замечтательно. А може и есть такое, токма я не знаю о сем.
I'm learning to live...
|
|
28.08.2014, 20:08 | #7 | |
Пользователь
Регистрация: 09.10.2011
Сообщений: 11
|
Цитата:
|
|
28.08.2014, 20:10 | #8 |
Пользователь
Регистрация: 09.10.2011
Сообщений: 11
|
На работе, знакомый программист мне сказал, что нужно как-то обнулять функцию после каждого использования, однако, я пока так и не понял каким именно образом..)
|
28.08.2014, 20:13 | #9 |
Пользователь
Регистрация: 09.10.2011
Сообщений: 11
|
|
28.08.2014, 20:16 | #10 |
Пользователь
Регистрация: 09.10.2011
Сообщений: 11
|
Не судите строго только) я в С++ только начинаю писать.. на работе использую другие языки программирования, такие как С и System Verilog, VHDL.. а С++ занялся скорее ради хобби.. хочу попытаться сделать маленькую игру)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
функция счётесли работает некорректно | Pavelasd | Microsoft Office Excel | 2 | 04.05.2014 02:05 |
Функция ВПР работает некорректно | Витальян | Microsoft Office Excel | 4 | 06.12.2013 00:20 |
Не работает с первого раза getline | AxenicX | Помощь студентам | 2 | 28.11.2009 23:43 |
Функция С++ getline() | Golovastik | Общие вопросы C/C++ | 8 | 30.07.2009 00:20 |