2014-11-01 87 views
0

我想创建一个程序,它从.txt文件读取三个变量(姓,UIN和他们的GPA)。该程序编译,但是当我尝试运行它时,它给我一个超出范围的错误。有人可以告诉我发生了什么,或者为什么会在我的程序中发生?尝试从文件读取时超出范围错误?

#include "std_lib_facilities_4.h" 

struct Student{ 

private: 
    string last_name; 
    int UIN; 
    double GPA; 

public: 

    Student(string l_name, int number, double grade): last_name(l_name), UIN(number), GPA(grade){} 
    string getlast_name() const{return last_name;} 
    int getUIN() const {return UIN;} 
    double getGPA() const{return GPA;} 

}; 

istream &operator >>(istream &in, Student &student){ 
string last_name; 
int UIN; 
double GPA; 
char c1, c2; 
in>>last_name>>UIN>>GPA; 
student = Student{last_name, UIN, GPA}; 
return in; 
} 

ostream &operator <<(ostream &out, const Student &student){ 
return out<<student.getlast_name()<<" "<<student.getUIN()<<" "<<student.getGPA(); 
} 

int main(){ 
vector<Student>vi; 
int i = 0; 

ifstream readStudent; 
readStudent.open("student.txt"); 
while (readStudent.good()){ 
    readStudent>>vi[i]; 
    ++i; 
} 

for(i=0; i<3; i++){ 
cout<<vi[i]<<endl; 
} 
} 

回答

2

的误差来自于:

vector<Student> vi; // an empty vector 

readStudent>>vi[i]; // oops, try to access out of bounds 

当载体具有N元件有效索引是通过0N - 1。当它是空的时候,你根本无法使用[]

要插入到矢量中,请使用push_back成员函数。你也应该检查你的流提取器是否成功。您可以一举两得的main()

Student temp; 

while (readStudent >> temp) 
    vi.push_back(temp); 

,你不需要i在所有。之后您可以使用vi.size()来了解您阅读的人数。

相关问题