1 | |||||||||||||||||||||
Перегрузка >>25.06.2013, 01:26. Показов 1508. Ответов 16
Метки нет (Все метки)
Доброго времени суток. Есть учебный пример перегрузки операций >> и <<.
Нормально работает, если я ввожу так: (123 ) 456 -7890 Объясните плз, в чем загвоздка? Добавлено через 17 минут Получилось исправить вот таким вот образом
(123) 456-7890 ?
0
|
25.06.2013, 01:26 | |
Ответы с готовыми решениями:
16
Перегрузка в виде метода VS Перегрузка в виде функции друг Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов перегрузка >> и << перегрузка |
31 / 31 / 4
Регистрация: 15.04.2011
Сообщений: 81
|
|
25.06.2013, 01:35 | 2 |
потому что метод istream::getline() выставляет failbit если не нашел перехода не новую строку через 4 символа. Дальше соответственно ничего не читается
http://www.cplusplus.com/refer... m/getline/
2
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
25.06.2013, 01:36 | 3 |
@Мимино, Вдумайтесь, пожалуйста, в название метода getline: "получить строку". У вас в операторе >> getline вызывается 3 раза соответственно должно быть 3 строки. Так как getline по умолчанию ищет символ '\n' для завершения и вашем случаи он находит его только один раз, так как вводиться всего лишь одна строка.
1
|
31 / 31 / 4
Регистрация: 15.04.2011
Сообщений: 81
|
|
25.06.2013, 01:37 | 4 |
The failbit flag is set if the function extracts no characters, or if the delimiting character is not found once (n-1) characters have already been written to s. Note that if the character that follows those (n-1) characters in the input sequence is precisely the delimiting character, it is also extracted and the failbit flag is not set (the extracted sequence was exactly n characters long).
http://www.cplusplus.com/refer... m/getline/
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
25.06.2013, 01:40 | 5 |
Более по научному выразился выше ksandro
1
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
||||||
25.06.2013, 01:46 | 7 | |||||
Можно, конечно, каждый раз восстанавливать поток в рабочее состояние:
Добавлено через 1 минуту @Мимино, конечно, поток находиться в ошибочном состоянии и чтоб его вернуть нужно вручную менять флаг либо вызвать метод clear()
1
|
31 / 31 / 4
Регистрация: 15.04.2011
Сообщений: 81
|
|
25.06.2013, 01:49 | 8 |
да, failbit распространяется объект istream, и он будет выставлен пока объект живой, или пока его вручную не поменяют.
тут можно почитать: http://www.cplusplus.com/refer... e/iostate/
1
|
31 / 31 / 4
Регистрация: 15.04.2011
Сообщений: 81
|
|
25.06.2013, 02:04 | 10 |
ну, вообщем-то там написано, что последняя операция ввода вызвала ошибку. После этой ошибки, больше операций ввода не будет, несмотря на то что getline ты вызываешь. То есть это имеется ввиду не последний вызов функции а последнее реальное чтение из потока.
0
|
31 / 31 / 4
Регистрация: 15.04.2011
Сообщений: 81
|
|
25.06.2013, 02:23 | 12 |
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
25.06.2013, 10:28 | 14 | |||||
1
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
25.06.2013, 11:00 | 16 |
@Мимино, так у вас проблемы с вводом были.
Добавлено через 46 секунд UPD: не заметил в первом посте решение
0
|
25.06.2013, 11:08 [ТС] | 17 |
0
|
25.06.2013, 11:08 | |
25.06.2013, 11:08 | |
Помогаю со студенческими работами здесь
17
перегрузка [] Перегрузка + Перегрузка + Перегрузка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |