Como ler de std :: cin até o final do fluxo?

Meu problema é que eu quero ler a entrada destd::cin mas não sei quanto tempo a entrada é. Também tenho quechar e não pode usarstd::string. Existem duas maneiras de lidar: a) O usuário digita o texto e, quando ele pressiona [ENTER], o programa para de ler. b) O usuário redirecionastd::cin para um arquivo (como.\a.oput < file) que pode conter várias linha

Editar Acabei de notar que std :: cin.eof () também é sempre falso também no caso de ler um arquiv

Para a) Eu poderia ler até que \ n ocorra. Para b)Edit: Não (Eu poderia ler até que std :: cin.eof () ocorra.) Mas quando não sei se estou tendo um problema a) ou b), como posso interromper o processo de leitur

Isso é o que tenho para a) ...

char buffer = ' ';
while(std::cin >> std::noskipws >> buffer && buffer != '\n')
{
    // do some stuff with buffer
}

... e B

char buffer = ' ';
while(std::cin >> std::noskipws >> buffer)
{
    // do some stuff with buffer
}

Também sei que existestd::cin.tellg() para obter a posição atual no fluxo.

Editar Parece que, no caso do arquivo, os fluxos de entrada são finalizados, da maneira questd::cin >> std::noskipws >> buffer getsfalse. O que o código acima faz para a):

Espera que o usuário faça uma entrada e pressione [ENTER] Então ele percorre todos os caracteres inseridos pelo usuário na última linhEm seguida, aguarde novamente o usuário fazer uma entrada e pressione [ENTER] Loop de processamento infinito em espera

Então, como faço?

questionAnswers(2)

yourAnswerToTheQuestion