Причина, по которой он не работает, заключается в том, что get () возвращает int, но вы используете входные данные как char.
Когда вы присваиваете результат get () для char, это нормально, еслив качестве последнего прочитанного символа был персонаж.НО, если последний прочитанный символ был специальным символом (например, EOF), тогда он будет усечен при назначении на символ, и, следовательно, последующее сравнение с EOF всегда будет неудачным.1006 *
Но следует отметить, что намного проще использовать более стандартный шаблон, где чтение выполняется как часть условия.К сожалению, get () не дает вам такой функциональности.Поэтому нам нужно переключиться на метод, который использует итераторы.
Обратите внимание, что стандартный istream_iterator не будет работать так, как вы ожидаете (так как он игнорирует пробелы).Но вы можете использовать istreambuf_iterator (обратите внимание на buf после istream), который не игнорирует пробелы.
void function (...)
{
for(std::istreambuf_iterator<char> loop(infile);
loop != std::istreambuf_iterator<char>();
++loop)
{
char ch = *loop;
...
}
}