| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Вопрос по ios::getline() |
| Автор: Чупакабро 24.9.2013, 10:55 | ||
| Есть код, который построчно читает текстовый файл и выводит на экран. Строковый буфер ограничен 70 символами. Строки короче 70 символов читаются нормально. Но после того, как считывается строка, по размеру более 70 символов (то есть считывается-то 69), дальнейшие вызовы getline() приводят к чтению 0 символов, программа зацикливается.
В чем здесь подвох? |
| Автор: xvr 24.9.2013, 14:51 |
В том, что после считывания для потока взводится флаг ошибки, и все дальнейшие манипуляции с ним игнорируются. Используйте file.clear() |
| Автор: Чупакабро 24.9.2013, 19:19 | ||
| xvr Добавил строку
, заработало. Но почему, почему так криво сделано? Какой тогда вообще смысл в параметре _Count? непонятно.. |
| Автор: xvr 25.9.2013, 16:43 |
Что бы не переполнился буфер. А так как хотели считать строку и не смогли (она банально не влезла), то это ошибка. Вот флаг в потоке и взвелся |
| Автор: Чупакабро 25.9.2013, 16:58 |
| xvr, спасибо за разъяснения! |
| Автор: EgoBrain 27.9.2013, 01:35 |
| То есть получается getline в любом случае читает до тех пор пока не наткнется на перевод строки, а второй аргумент влияет лишь на возвращаемое значение?? Так чтоле? |
| Автор: xvr 27.9.2013, 15:29 | ||
Нет. Она прочтет столько, сколько влезет в буфер, а потов взведет флаг ошибки
http://www.cplusplus.com/reference/istream/istream/getline/ |
| Автор: bsa 28.9.2013, 10:24 |
| Рекомендую использовать std::string и std::getline. Значительно удобней и проблем меньше. |