Основная проблема заключается в использовании getline
для чтения строковых элементов.
getline(getData, data[i].dinosaurName);
getline(getData, data[i].dinosaurClass);
getline(getData, data[i].dinosaurHabitat);
Поскольку это токены, разделенные пробелами, используйте оператор >>
, чтобы прочитать их.
getData >> data[i].dinosaurName;
getData >> data[i].dinosaurClass;
getData >> data[i].dinosaurHabitat;
Кроме того, избегайте использования
while (!getData.eof()) { ... }
См. Почему iostream :: eof внутри условия цикла считается неправильным? для получения подробной информации.
Версия вашей очищенной функции будет выглядеть так:
void loadData(ifstream& getData, dinosaurInfo *data)
{
// Stop when 10 records are read.
// Also, stop reading when getData is an error state.
for (int i = 0; i < 10 && getData; i++)
{
getData >> data[i].dinosaurName;
getData >> data[i].dinosaurClass;
getData >> data[i].dinosaurHabitat;
getData >> data[i].dinosaurSize;
getData >> data[i].dinosaurWeight;
getData >> data[i].battleRating;
}
}