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