То, как вы передаете ifstream
в функцию, совершенно нормально.
Я подозреваю, что проблема заключается в том, как вы управляете своим массивом StudentType
и его размером (numStudents
),Я бы порекомендовал изменить код для использования std::vector
вместо необработанного массива.В общем, вы всегда должны отдавать предпочтение векторам над массивами, если только у вас нет веской причины использовать массив.
векторы могут расти, чтобы вместить больше данных и отслеживать их размер, поэтому вам не нужно это делать.
Кроме того, для функций рекомендуется возвращать объекты, а не изменять объекты, переданные через список параметров.
#include <vector>
using namespace std;
vector<StudentType> ReadStudentData(ifstream& infile) {
vector<StudentType> students;
string lastName, firstName;
int testScore;
while (infile >> lastName >> firstName >> testScore) {
if (testScore >= 0 && testScore <= 100) {
StudentType student;
student.studentName = lastName + ", " + firstName;
student.testScore = testScore;
students.push_back(student);
}
}
return students;
}
// call the function
vector<StudentType> students = ReadStudentData(infile);
// or if you have a C++11 compiler
auto students = ReadStudentData(infile);
// use students.size() to determine how many students were read