Входной поток не обнаруживает конец файла до тех пор, пока после вы не попытаетесь прочитать за ним. Когда вы читаете последнее слово в файле, поток ввода остается действительным; в следующем цикле infile >> text пытается прочитать прошедший EOF и завершается неудачно, но следующая строка все равно выполняется.
Цикл должен выглядеть следующим образом:
while (infile >> text)
cout << text << endl;
Таким образом, EOF будет обнаружен до того, как попытается записать на выход.