Моя проблема в том, что я хочу прочитать ввод из std::cin
, но не знаю, как долго он идет. Также я должен char
и не могу использовать std::string
. Есть два способа справиться с этим: а) Пользователь вводит текст, и когда он нажимает [ENTER], программа прекращает чтение. б) Пользователь перенаправляет std::cin
в файл (например, .\a.oput < file
), который может содержать несколько строк.
Редактировать: Только что заметил, что std::cin.eof() всегда имеет значение false, даже в случае чтения из файла.
Для а) я мог читать, пока не произойдет \n. Для б) Редактировать: Нет (я мог читать до тех пор, пока не произойдет std::cin.eof().) Но когда я не знаю, возникает ли у меня проблема а) или б), как можно ли прервать процесс чтения?
Это то, что у меня есть для а) ...
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer && buffer != '\n')
{
// do some stuff with buffer
}
... и б)
char buffer = ' ';
while(std::cin >> std::noskipws >> buffer)
{
// do some stuff with buffer
}
Также я знаю, что есть std::cin.tellg()
, чтобы получить текущую позицию в потоке.
Редактировать: Похоже, что в случае с файлом входные потоки прерываются таким же образом, как std::cin >> std::noskipws >> buffer
получает false
. Что код выше делает для a):
- Он ждет, пока пользователь сделает ввод и нажмет [ENTER]
- Затем он перебирает каждый символ, введенный пользователем в последней строке.
- Затем он снова ждет, пока пользователь сделает ввод, и нажмет [ENTER].
- Бесконечный цикл ожидания-обработки
Итак, как мне это сделать?
std::string
. Возможно, мы сможем помочь вам и с этой проблемой. - person Robᵩ   schedule 23.11.2011kbhit()
вconio.h
- person Mooing Duck   schedule 23.11.2011std::string
. Мы также не можем использовать нестандартный код. То, о чем я спрашиваю, не требуется напрямую в упражнениях, но мне просто любопытно... - person Lukas   schedule 23.11.2011isatty
, но лучше было бы установить флаг опции, чтобы установить режим, если это абсолютно необходимо. - person David Schwartz   schedule 23.11.2011while(std::cin>>std::noskipws>>buffer && !std::cin.eof() && buffer != '\n')
? - person Walter   schedule 23.11.2011