массивы — почему пропускается первая строка файла данных Переполнение стека

При выполнении этого цикла для моего школьного задания кажется, что он пропускает первую строку файла данных, из которого я извлекаю данные.

Вот файл данных
Джо Джонсон 89
Сьюзи Колдуэлл 67
Мэтт Бейкер 100
Алекс Андерсон 87
Перри Диксон 55

Вывод, который я получаю:

Колдуэлл, Сьюзи Д
Бейкер, Мэтт А
Андерсон, Алекс Б
Диксон, Перри Ф
Средний класс 77,25

Вот код

   #include <iostream>
#include <string>
#include <fstream>
#include <iomanip>

using namespace std;int main()
{
// Variable declarations:
string fName[10];
string lName[10];
float grade_Average;
string file;
string name;
int scores[10];
float sum = 0;
char grade;
int i = 0;ifstream din;// Function body:

cout << "Enter the name of the file. " << endl;
cin >> file;

din.open(file.c_str());

if (!din)
{
cout << " Cannot open the input file. Please try again." << endl;
return 0;
}

cout << setw(10) << setfill(' ')  << "Name" <<setw(20)<<setfill(' ')<< "Grade" << endl;
din >> fName[i];
din >> lName[i];
din >> scores[i];
while (!din.eof())
{

i++;
din >> fName[i];
din >> lName[i];
din >> scores[i];

sum = sum + scores[i];switch (static_cast<int> (scores[i]/10))
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
grade = 'F';
break;
case 6:
grade = 'D';
break;
case 7:
grade = 'C';
break;
case 8:
grade = 'B';
break;
case 9:
grade = 'A';
break;
case 10:
grade = 'A';
break;
default:
cout << "Invalid score." << endl;}

name = lName[i] + ',' + fName[i];
cout << setw(10) << setfill(' ') << name  << setw(20) << setfill(' ')<<(" ") << grade << endl;}
grade_Average = sum / i;
cout << "Class average " << grade_Average << endl;din.close();

return 0;
}
// end function main

1

Решение

Первая строка не пропускается, но вы никогда не распечатываете результаты:

    din >> fName[i];
din >> lName[i];
din >> scores[i];
while (!din.eof())
{

i++;

Обратите внимание, что в первых трех строках приведенного выше кода вы читаете значения для fName[0], lName[0], а также scores[0], но затем вы увеличиваете i (внутри цикла while) и больше никогда не смотрите на эти значения.

Вам лучше удалить эти три строки и переместить i++; линия до конца цикла while.

2

Другие решения

Других решений пока нет …