2013-04-24 88 views
0

該塊給我在內存位置0x0013f59c處的錯誤消息std :: out_of_range。 問題來自3條中間線(我放了星號)。代碼在完美工作之前。我還親自檢查了每行都包含正確的前6個字符。std :: out_of_range在內存位置

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

那麼你的文件中有什麼?當引發異常時,originaldata的值是多少? – john 2013-04-24 15:26:07

+0

爲了防止這些錯誤,您應該在提供有關它的詳細信息之前驗證'originaldata'。這被稱爲*魯棒性*。 – 2013-04-24 19:31:31

回答

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之前不要使用它。

+1

它告訴你上次讀取是否涉及試圖提取文件結束。不一定是失敗。 – 2013-04-24 15:33:04

+0

我仍然有這個問題 – alwaystudent 2013-04-25 12:31:36

+0

好的,當你得到異常時,originaldata的值是多少?它是空白線還是像Drew Dormann所建議的那樣太短?最初我曾問過這個問題,這是幫助你理解問題的基本信息。 – john 2013-04-25 12:36:31

2

您的輸入文件可能包含一個空行,其中getline將讀取,產生一個空字符串。

或者格式不正確的行太短。

考慮使用這個。

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

while將讓你的代碼使用getline作爲條件,如果任何失敗位在openfile集優雅地失敗。不只是EOF。

+0

代碼不斷給出相同的錯誤 – alwaystudent 2013-04-25 12:29:44

相關問題