2011-12-05 78 views
0

這個項目在C++中。我試圖沿着一個文本文件移動,並在屏幕上每次打印80個字符的substr。下一步將是更新x的開始位置,然後再次打印。我的目標是通過txt「滑動」。當我開始第二個流操作時,我沒有收到錯誤,但屏幕上沒有輸出任何文本。 任何知道我在做什麼錯的人?在執行新操作之前是否必須關閉文件? ThanxC++將txt讀入字符串錯誤

ifstream ifs("data.txt"); 
string line; 
string subline; 
int x=5; 

while(getline(ifs,line)) { 
    subline=line.substr(x,80); 
    cout << subline; 
} 

system("pause"); 
system("cls"); 
x++; 


//my issue! 
while(getline(ifs,line)) { 
    subline=line.substr(x,80); 
    cout << subline; 
} 
+1

你確實應該嘗試學會與你的IDE /調試器調試應用程序。你在用什麼IDE? – Constantinius

+0

代碼塊。它並沒有提到任何錯誤。 根據記錄:我用 的#include 的#include 的#include 的#include 使用命名空間std; – Rps

+1

我不是指編譯bug。使用調試器,您可以瀏覽應用程序,檢查其路徑,分析變量等。查看此URL:http://wiki.codeblocks.org/index.php?title=Debugging_with_Code:Blocks – Constantinius

回答

2

您即將到達文件末尾,它將設置'eof'狀態位(並刪除'good'狀態位)。這意味着基本上所有後續的讀操作都會失敗。

簡單的解決方法是後添加X ++:

ifs.clear(); // Get rid of the 'eof' state bit 
ifs.seekg(0, ios_base::beg); // Go back to the beginning of the file 
+0

也可以養成使用++ x而不是x ++的習慣,因爲它可能稍快一些;它不需要在增量之前複製該對象以返回舊值。 – matiu

+1

另外@Fuzz就在上面,你應該一直在檢查ifs.fail()。 – matiu

3

是的,你需要在使用它後關閉文件。總是清理你在編程中做的每件事情,尤其是文件操作。

在對文件進行實際操作之前,應該檢查文件是否確實打開成功。 當您按照自己的方式打開文件(使用構造函數)時,如果文件打開操作失敗,則沒有任何內容返回給您。

您可以檢查ifstream方法'good()'以查看流成功打開,還是'fail()'查看它是否不成功。

例如

ifstream ifs("data.txt"); 
if(ifs.fail()) 
{ 
    std::cerr << "There was an error opening the file" << std::endl; 
    return -1; // use -1, or some sort of non-zero number representing your error code to the command line 
} 

// Do your reading/writing 

ifs.close(); 

我建議你閱讀this info一些有關使用ifstream的時候爲您提供的功能。

1

您應該嘗試在第二次打開文件之前關閉該文件。 問題在於執行第二次讀取時文件指針指向最後。 嘗試將文件指針重置爲開頭或重新打開文件。