这个块在内存位置0x0013f59c给出了错误消息std :: out_of_range。 问题来自3条中间线(我把星号放在哪里)。在代码完美运行之前。我还亲自检查了每行都正确包含了前6个字符。
if (openfile.is_open() && newfile.is_open())
{
while (! openfile.eof())
{
getline(openfile, originaldata);
string day(originaldata,6,2); *
string month(originaldata,4,2); *
string year(originaldata,0,4); *
string data=day+"/"+month+"/"+year;
}
}
答案 0 :(得分:4)
试试这个
if (openfile.is_open() && newfile.is_open())
{
while (getline(openfile, originaldata))
{
string day(originaldata,6,2);
string month(originaldata,4,2);
string year(originaldata,0,4);
string data=day+"/"+month+"/"+year;
}
}
使用eof几乎总是错误的,因为eof告诉您为什么最后读取失败,它不会告诉您 next 读取将失败。因此,如果你打算使用它,那么在getline之后使用它。
答案 1 :(得分:2)
您的输入文件可能包含一个空白行,getline
将读取该行,生成一个空字符串。
或者格式错误的行太短了。
考虑使用它。
while ( getline(openfile, originaldata) && originaldata.length() > 8 )
在getline
中使用while
作为条件,如果在openfile
中设置任何失败位,您的代码将会正常失败。不只是EOF。