今天我的同学请我帮她调试她的代码如下:
int main(int argc, char *argv[])
{
vector<Woker> A;
int a;
a = read_txt("234",A);
if( a==-1 )
{
cerr<<"wrong"<<endl;
}
// else
// {
// print(A);
// }
return 0;
}
int read_txt(string filename,vector<Woker> & A)
{
ifstream in(filename);
if( !in )
{
return -1;
}
while( !in.eof())
{
Woker temp;
in >>temp.ID>>temp.Name>>temp.Salary>>temp.WorkYears;
A.push_back(temp);
}
in.close();
return 0;
}
我在mycomputer上运行它,它总是打印
wrong
但是我将此代码复制到另一个文件中,并运行它。我得到以下内容:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
有没有人可以告诉我这有什么不同?
答案 0 :(得分:0)
第一个结果意味着,在您的计算机上,没有名为"234"
的文件;所以函数立即返回而不进入错误的循环。
第二个结果可能是因为循环测试了“文件结束”条件(但是错误地:你应该在尝试读取之后测试,因为只有当你尝试读取时才设置条件过去的结束),但不测试任何其他错误。如果任何输入错误,那么使用>>
读取失败,循环将在每次读取失败后继续插入temp
的副本。最终你会耗尽内存,这可以通过抛出bad_alloc
异常来表示。
更正确的循环版本是:
Woker temp;
while (in >>temp.ID>>temp.Name>>temp.Salary>>temp.WorkYears) {
A.push_back(temp);
}
将在文件末尾或任何输入失败时结束。如果您想报告错误,可以在之后检查in.eof()
和in.fail()
。