C++ 从不同函数读取文件
我试图从另一个函数中读取同一个文件,但它不起作用。 我想问题是我试图从C++ 从不同函数读取文件,c++,fstream,C++,Fstream,我试图从另一个函数中读取同一个文件,但它不起作用。 我想问题是我试图从ifstream&input中读取,但我不知道其他实现方法 #include <iostream> #include <fstream> using namespace std; class Student{ public: char name[40]; // i cant use string int age; void Input(ifstream &i
ifstream&input
中读取,但我不知道其他实现方法
#include <iostream>
#include <fstream>
using namespace std;
class Student{
public:
char name[40]; // i cant use string
int age;
void Input(ifstream &input)
{
input.getline(name, 40);
input >> age;
}
};
void Read(Student *students, int &numberOfStudents)
{
ifstream input("test.txt");
input >> numberOfStudents;
students = new Student[numberOfStudents];
for (int i = 0; i < numberOfStudents; ++i)
students[i].Input(input);
input.close();
}
int main()
{
int size = 0;
Student *students = NULL;
Read(students, size);
for (int i = 0; i < size; ++i)
cout << students[i].name << endl << students[i].age << endl;
return 0;
}
(如果程序运行正常,我应该得到1名年龄2等)
但是我得到的是没有年龄分别为1、2、3的名字,因为你定义了:
void Read(Student *students, int &numberOfStudents)
然后
int size = 0;
Student *students = NULL;
Read(students, size);
students
指针由值传递,因此Read()
无法更改函数外部的内存地址
要解决此问题,只需通过引用传递指针:
void Read(Student *& students, int &numberOfStudents)
最后,正如我所评论的,您需要考虑空白,例如,'\n'
行结束
使用>
运算符提取数据时,在文件中:
void Input(ifstream &input)
{
input.getline(name, 40);
input >> age;
input.ignore(1);
}
读取文件中的学生人数也一样。您不返回指向学生的指针,因此分配仅在本地进行,请返回指针并从返回值中重写
students
。另外:您正在泄漏内存。你能用vector吗?@n314159我忘了写delete。谢谢我不能使用vector(我想使用,但我不能)。我运行了一个小测试,我做了同样的事情(不返回指针),但我的数组仍然更改了值。我还是要试试。感谢使用向量来存储学生对象。更好的方法是:为从istream读取的学生定义构造函数。@JATothrim我不能使用vector为什么不能使用std::string
或std::vector
?我的函数现在返回指针。现在,这部分工作正常。但我只得到3个学生对象,没有名字,年龄=0。主要问题仍在void Input()
中。感谢您的建议您能链接您试图读取的test.txt文件吗?使用input>>name代码>工作。问题似乎是您没有正确计算文件中的空白,即换行符。以下数据工作:
void Input(ifstream &input)
{
input.getline(name, 40);
input >> age;
input.ignore(1);
}