0

此块在内存位置 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;  
     }
}
4

2 回答 2

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 会告诉您上次读取失败的原因,它不会告诉您下一次读取将失败。因此,如果您要使用它,请在 getline 之后而不是之前使用它。

于 2013-04-24T15:27:21.593 回答
2

您的输入文件可能包含一个空行,getline它将读取,产生一个空字符串。

或者格式错误的行太短。

考虑使用这个。

  while ( getline(openfile, originaldata) && originaldata.length() > 8 )

如果在. getline_ while_ _ openfile不仅仅是EOF。

于 2013-04-24T15:27:34.547 回答