使用文件中的数据从函数返回数组 我得到了一个C++程序,我把信息插入到一个文件中。我有第二个程序来获取数据。我的目标是获取所有数据,并将其作为类型为Student的数组返回。在GetFromFile方法中,我获取信息并可以打印它,但如何返回它并在主函数中使用它: int size; Student *students = getFromFile( "D:\\test.txt", size ); cout << students[0].name;
这是我的代码:使用文件中的数据从函数返回数组 我得到了一个C++程序,我把信息插入到一个文件中。我有第二个程序来获取数据。我的目标是获取所有数据,并将其作为类型为Student的数组返回。在GetFromFile方法中,我获取信息并可以打印它,但如何返回它并在主函数中使用它: int size; Student *students = getFromFile( "D:\\test.txt", size ); cout << students[0].name;,c++,C++,这是我的代码: struct Student { string name; char egn[11]; short grade; double avg_grades; int excused, unexcused; }; Student* getFromFile(string filename, int &length) { fstream file; file.open(filename.c_str(), ios::in); file
struct Student
{
string name;
char egn[11];
short grade;
double avg_grades;
int excused, unexcused;
};
Student* getFromFile(string filename, int &length)
{
fstream file;
file.open(filename.c_str(), ios::in);
file >> length;
Student students[length];
for ( int i = 0; i < length; i++ )
{
file >> students[i].name >> students[i].egn >> students[i].grade >> students[i].avg_grades >> students[i].excused >> students[i].unexcused;
}
file.close();
return students;
}
int main()
{
int size;
Student *students = getFromFile( "D:\\test.txt", size );
cout << students[0].name;
struct学生
{
字符串名;
char-egn[11];
短等级;
双平均等级;
情有可原;
};
Student*getFromFile(字符串文件名、整型和长度)
{
流文件;
file.open(filename.c_str(),ios::in);
文件>>长度;
学生[长度];
for(int i=0;i>学生[i]。姓名>>学生[i]。egn>>学生[i]。成绩>>学生[i]。平均成绩>>学生[i]。原谅>>学生[i]。无理;
}
file.close();
留学生;
}
int main()
{
整数大小;
学生*students=getFromFile(“D:\\test.txt”,大小);
cout首先,这:
file >> length;
Student students[length];
是非标准扩展。数组的长度应在编译时已知
其次,返回指向数组超出作用域后将释放的内存的指针。应改用std::vector
:
#include <vector>
// ...
std::vector<Student> getFromFile(string filename)
{
// ...
std::vector<Student> students(length);
#包括
// ...
std::vector getFromFile(字符串文件名)
{
// ...
std::矢量学生(长度);
此外,您不再需要通过引用传递length
,因为std::vector
具有成员函数。在getFromFile
中,您将返回一个指向只存在于该函数中的向量的指针。然后,在main
中,您有一个指向某些无效数据的指针
使用数据后,您应该在getFromFile
中使用Student*students=new Student[length];
,并在main
中使用。但是像其他人说的那样,使用向量是一个更好的主意。警告信息非常清楚。您可以使用向量吗?
#include <vector>
// ...
std::vector<Student> getFromFile(string filename)
{
// ...
std::vector<Student> students(length);