Проблема в том, что если нет 10 чисел, поток переходит в состояние ошибки и больше ничего не читает после этого. Вам придется очистить состояние ошибки потока, прежде чем он сможет прочитать что-либо еще.
while (inputStream >> firstname >> lastname)
{
sum = 0;
fout << firstname << ' ' << lastname;
for (int i = 0; i < 10; i++)
{
// Deal with missing numbers.
if ( !(inputStream >> quizScore) )
{
break;
}
sum += quizScore;
fout << " " << quizScore;
}
cout << firstname << "\t" << sum / 10 << "\n";
fout << " " << sum / 10 << "\n";
// Clear the error state before reading contents of next line
inputStream.clear();
}
Для задач программирования, таких как та, с которой вы имеете дело, лучше всего:
- Читать содержимое файла построчно.
- Обрабатывать каждую строку отдельно.
std::string line;
while ( getline(inputStream, line) )
{
std::istringstream str(line);
str >> firstname >> lastname;
sum = 0;
fout << firstname << ' ' << lastname;
for (int i = 0; i < 10; i++)
{
// Deal with missing numbers.
if ( !(str >> quizScore) )
{
break;
}
sum += quizScore;
fout << " " << quizScore;
}
cout << firstname << "\t" << sum / 10 << "\n";
fout << " " << sum / 10 << "\n";
}