2014-08-30 50 views
-4

阅读的对象。如果我有一个包含10行,每行包含有关下列对象信息的文件,从C++中的文件

class student 
{ 
    public: 
    string name; 
    int age; 
    int rollnum; 
    int year; 
    string father; 
    string mother; 
    string category; 
    string region; 
    char sex; 
    string branch; 
    int semester; 
}; 

我怎样才能从文件中读取所有10个对象的信息? (我猜我将不得不采取10个对象的数组,这个)

+0

重载'operator >>'。 – chris 2014-08-30 14:27:32

+0

该怎么做。 – user3776323 2014-08-30 14:29:14

+0

在网站上有一个[特别好,命名问题](http://stackoverflow.com/questions/4421706/operator-overloading)。 – chris 2014-08-30 14:31:44

回答

0
istream& operator >>(istream& in, student& val) { 
    return in >> name >> age >> rollnum >> year; // ... 
} 

然后,你可以这样做:

for (string line; getline(infile, line);) { 
    istringstream stream(line); 
    student person; 
    stream >> person; 
} 

现在人正在填充每行一次。我这样做,而不是直接从文件流中传输,因为这种方式更安全:如果一行的标记数量不正确,它不会误解列的内容,而如果没有getline(),你可能会天真地解析10个标记11令牌行,则认为该行上的第11个令牌是下一个记录的第一个令牌。只是初学C++文本解析代码时发生的典型错误。