如何将文件传递给函数

How to pass a file into a function?

本文关键字:函数 文件      更新时间:2023-10-16

我很难理解如何将文件传递到函数中。

我有一个有20个名字和20个考试成绩的文件,需要由一个函数读取。然后,该函数将把名字和分数分配给一个名为student的结构。

我的问题是如何用适当的参数编写函数调用。? 使我的函数读取文件中的数据。谢谢。

// ask user for student file
cout << "Enter the name of the file for the student data to be read for input" << endl;
cout << " (Note: The file and path cannot contain spaces)" << endl;
cout << endl;
cin >> inFileName;
inFile.open(inFileName);
cout << endl;
// FUNCTION CALL how do i set this up properly?
ReadStudentData(inFile, student, numStudents ); 
void ReadStudentData(ifstream& infile, StudentType student[], int& numStudents)
{
    int index = 0;
    string lastName, firstName;
    int testScore;
    while ((index < numStudents) &&
           (infile >> lastName >> firstName >> testScore))
    {
        if (testScore >= 0 && testScore <= 100)
        {
            student[index].studentName = lastName + ", " + firstName;
            student[index].testScore = testScore;
            index++;
        }
    }
    numStudents = index;
}

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

对文件对象的引用似乎是好的,但是StudentType对象的数组可能是错误的。试试这个:

void ReadStudentData(ifstream& infile, 
std::vector<StudentType>& vecStudents, 
int& numStudents)