int main(){
vector <string> v;
std::ifstream input("data.txt");
std::string line;
从文本文件中读取数据 文件包含数据行,每行包含1个参数4行共同制作学生数据
while( std::getline( input, line ) ) {
v.push_back(line);
}
int k = 0, count = 0;
int size = v.size() / 4;
Student **temp;
temp = new Student*[size];
string name, ID, department, CGPA;
这里我正在阅读矢量并在这里创建一个新的学生对象
for (int i = 0; i < v.size();++i)
{
if (k == 0)
{
name = v[i];
}
if (k == 1)
{
ID = v[i];
}
if (k == 2)
{
department = v[i];
}
if (k == 3)
{
CGPA = v[i];
k = 0;
这里它崩溃了
temp[count] = new Student(name, stof(ID.c_str()), department, stof(CGPA.c_str()));
temp[count]->print();
count++;
//cout << name << "\t" << ID << "\t" << department << "\t" << CGPA << endl;
//break;
}
k++;
}
system("pause");
}
答案 0 :(得分:2)
k == 3
设置k = 0;
时。然后您执行k++;
,因此下次循环时,您需要k == 1
,并跳过name
作业。
而不是循环遍历v
1乘1,并使用变量来跟踪您正在处理的项目,请按4的步骤执行。
for (int i = 0; i < v.size(); i += 4)
{
name = v[i];
ID = v[i+1];
department = v[i+2];
CGPA = v[i+3];
temp[count] = new Student(name, stof(ID.c_str()), department, stof(CGPA.c_str()));
temp[count]->print();
count++;
}
如果您只是将学生放入向量中,您可以避免所有这些麻烦。您可以以4行为单位读取文件,创建Student
,然后将其推送到向量中。