gpt4 book ai didi

c++ - 如何将文件传递给函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:52 26 4
gpt4 key购买 nike

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

我有一个包含 20 个姓名和 20 个考试分数的文件,需要由一个函数读取。然后该函数会将姓名和分数分配给名为学生的结构。

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

代码

// 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 而不是原始数组。通常,除非您有充分的理由使用数组,否则您应该始终更喜欢 vector 而不是数组。

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

关于c++ - 如何将文件传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com