1 | ||||||
Признак окончания потока для буферного итератора11.04.2014, 13:44. Показов 2095. Ответов 25
Метки нет (Все метки)
Собственно надоело вводить ctrl+z для ввода признака окончания потока, засим возник вопрос а возможно ли изменить этот самый признак для буферного итератора?
Взглянул на заголовочники - узрел эти конструкторы:
(traits_type это шаблон char_traits) Добавлено через 2 часа 10 минут Неужели задача такая сложная?
0
|
11.04.2014, 13:44 | |
Ответы с готовыми решениями:
25
Не работает признак окончания ввода(признак-0) Можно ли задать ограничения для итератора потока ввода? Бинарные файлы. Признак окончания файла С клавиатуры вводятся последовательность целых чисел.0 - признак окончания последовательности |
Tulosba
|
11.04.2014, 14:44
#2
|
0
|
11.04.2014, 15:02 [ТС] | 3 |
Tulosba, ну очень смешно.
Пытался написать свой тип от char_traits, но вовремя понял, что ни к чему хорошему это не приведет. EOF запрятан где-то очень глубоко в заголовочниках и как на него повлиять неизвестно. Есть ли другой путь?
0
|
14.04.2014, 09:06 [ТС] | 5 | |||||
Да, да именно для этого.
Если бы я мог привести пример кода то не задавал бы такой вопрос. А вообще-то вопрос можно перефразировать так - как заставить вот такую конструкцию завершать ввод при вводе '\n':
0
|
14.04.2014, 12:26 [ТС] | 8 |
Потребность в этой хрени весьма прозаическая. Зачастую форматированный ввод совсем не требуется. Например пользователь вводит определенное число и програме требуется пропарсить его разряды. Обычно в таком случае вводят переменную числового типа, а затем в цикле делят его на 10. Вопрос зачем это делать если пользователь изначально задает число ввиде последовательности символов, которые я могу загнать например в строку или вектор, а также в свой класс, но для этого мне необходим посимвольный парсинг вводимой строки. Вот такие дела.
На самом то деле заставить легко об этом я писал выше. Проблема возникает при связывании входного/выходного потоков с консолью. Т.о. мы опять возвращаемся к тому вопросу который я не так давно задавал и не получил на него ответа...
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
14.04.2014, 12:50 | 9 | |||||
Сообщение было отмечено Ilot как решение
Решение
1
|
14.04.2014, 13:19 [ТС] | 10 | |||||
А говорила мне мамка учи потоки жаль не послушался. Надо бы это исправить...
alsav22, спасибо, но вот только в вектор заносится только один символ... Да и насколько мне позволяет буржуский in_avail() возвращает кол-во символов которые еще остались в потоке. А ведь '\n' тоже простой символ, а именно его мне нужно отслеживать. Отсюда вопрос: есть ли возможность посимвольно читать буфер? Добавлено через 6 минут Неужели я такой дурак?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
14.04.2014, 14:52 | 15 | |||||
Понял - это особенности mingw. Тогда добавить:
1
|
14.04.2014, 15:05 [ТС] | 16 |
Может быть. Однако таки не был получен ответ на вопрос как связать буфер с входным/выходным потоками консоли. И на самом деле только ваше последнее сообщение более мение соответствовало сути вопроса, предыдущие ответы не соответствовали самой постановке вопроса в плане использования пользовательского типа символом. А вот код в последнем посте к сожалению не связывает буфер с выходным потоком. Вот такие дела.
Добавлено через 2 минуты alsav22, как я понял это синхронизация со стандартными потоками С. А можете поподробнее разъяснить в чем собственно тонкость?
0
|
18894 / 9852 / 2410
Регистрация: 30.01.2014
Сообщений: 17,295
|
|||||||||||
14.04.2014, 15:13 | 17 | ||||||||||
Я предполагал, что ты сможешь это сделать самостоятельно. Нужно было только реализовать должным образом класс console_buffer. Именно он и связывает с консолью. Если это было не понятно из моего ответа, то стоило спросить
А по текущей теме можно предложить еще реализовать свой собственный итератор, который умеет собственный eof:
Вызов соответственно будет такой:
2
|
14.04.2014, 15:16 [ТС] | 18 |
Вот именно в этом и состоял вопрос. Если бы я знал как это сделать то, по-видимому, не создавал бы тему.
Не думаю, что стоит так усложнять задачу ради одного метода. К тому же более простое решение указанно в одном из моих последних сообщений, но все равно спасибо.
Вообще-то достаточно просто перегрузить констукторы.
0
|
18894 / 9852 / 2410
Регистрация: 30.01.2014
Сообщений: 17,295
|
|
14.04.2014, 15:21 | 19 |
Это зависит от ситуации. Допустим здесь и не стоит, в целях самообразования разве что
Добавлено через 55 секунд Если интересно, то вечером могу показать пример.
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
14.04.2014, 15:26 | 20 |
Без понятия, просто на практике столкнулся (в студии всё работает и так). Это, скорее, вопрос к знатокам gcc и Linux (так как именно там без этого не работает).
1
|
14.04.2014, 15:26 | |
14.04.2014, 15:26 | |
Помогаю со студенческими работами здесь
20
С клавиатуры вводятся последовательность целых чисел 0 - признак окончания последовательности Прочитать строку с клавиатуры (признак окончания строки – нажатие Enter) Пользователь вводит любые числа с клааиатуры,признак окончания 0. Проверить если в данной последовательности 5 Ввод пользователем заранее НЕ известного количества чисел(выбрать признак окончания ввода-число 999) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |