Я только что нашел комментарий в этом ответе о том, что использование iostream::eof в условии цикла "почти наверняка неправильно". Я обычно использую что-то вроде while(cin>>n) - которое, я думаю, неявно проверяет EOF.
Почему проверка eof явно использует while (!cin.eof()) неправильно?
Чем он отличается от использования scanf("...",...)!=EOF в C (который я часто использую без проблем)?