Как читать из 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, Что код выше делает для а):

Он ждет, когда пользователь сделает ввод и нажмет [ENTER]Затем он просматривает каждый символ, введенный пользователем в последней строке.Затем он снова ждет, пока пользователь сделает ввод, и нажмите [ENTER].Бесконечно ожидания обработки контура

Так как мне это сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос