2011-04-11 168 views
5

我很难理解如何将文件传递给函数。如何将文件传递给函数?

我有一个文件有20个名字和20个测试分数,需要被一个函数读取。该函数会将名称和分数分配给一个名为student的结构。

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

CODE

// 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; 
} 
+2

您目前的代码面临的问题是什么?我发现,你正在传递参数。 – iammilind 2011-04-11 04:25:10

回答

0

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

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

的方式传递一个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 
+0

这有一个作业的气味, OP可能无法使用矢量,并被告知使用原始数组......并且此时问题已有2年的历史。 – Casey 2013-08-16 14:46:10