Моя проблема в том, что я хочу прочитать входные данные из std::cin
, но не знаю, как долго они вводятся. Также я должен char
и не могу использовать std::string
.
Есть два способа, которыми я должен справиться:
а) Пользователь вводит текст, и когда он нажимает [ENTER], программа прекращает чтение.
б) Пользователь перенаправляет std::cin
в файл (например, .\a.oput < file
), который может содержать несколько строк.
Редактировать: Только что заметил, что std :: cin.eof () всегда ложно и в случае чтения из файла.
Для а) Я мог читать, пока не произойдет \ 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
.
Что код выше делает для):
- Он ожидает, когда пользователь сделает ввод и нажмет [ENTER]
- Затем он просматривает каждый символ, введенный пользователем в последней строке.
- Затем пользователь снова ждет ввода и нажимает [ENTER]
- Бесконечно ожидания обработки петли
Так как мне это сделать?