2013-05-14 22 views
1

我有很少的c + +編程經驗,我寫了一個快速程序來查找長鏈接列表中的鏈接組。C++程序突然停止寫入文件

我一直在使用這個程序的最後2天,它工作正常(我猜效率低下,但它的工作)。但突然停止寫入文件。我創建了一個新文件並在程序中更改了文件名以檢查是否存在損壞,但仍然無法正常工作。我也有一個完全相同的程序,通過一個單獨的鏈接列表進行搜索,該程序仍在工作。

下面是代碼: 我已經得到了該程序通過檢查while循環的字符串寫入文件,而不是一個for循環

#include <iostream> 
#include <fstream> 
#include <string> 


int main() 
{ 
    std::string STRING; 
    std::string findString; 
    std::string line; 
    std::ifstream infile; 

    std::cout<<"Find String: "; 
    std::getline(std::cin, findString, '\n'); 

    infile.open("old.rtf"); 
    std::ofstream returnFile("return.txt"); 

    int a = 0; 
    std::string previousLine = ""; 

    while(a < 1) 
    { 
     std::getline(infile, STRING); 
     while(STRING != previousLine && STRING.find(findString) != std::string::npos) 
     { 
        previousLine = STRING; 
        returnFile<<STRING<<"\n"; 
        std::cout<<STRING<<std::endl; 
     } 
    } 
    infile.close(); 
    std::system("pause"); 
    return 0; 
} 

我使用這個編譯g ++(運行山獅)

感謝您的幫助!

+0

它停止寫輸出到「return.txt」 –

+1

對不起,錯過了那一點在你的問題和忍者刪除我的評論。 – Collin

回答

0

我解決了我的問題(得到了回答者的大力幫助!)。

在我原來的問題,我用下面的代碼來遍歷列表:

while(a < 1) 
{ 
    std::getline(infile, STRING); 
    if(STRING != previousLine && STRING.find(findString) != std::string::npos) 
    { 
     previousLine = STRING; 
     returnFile<<STRING<<'\n'; 
     std::cout<<STRING<<std::endl; 
    } 
} 

我能得到節目由if語句while語句改變裏面寫入文件。下面是。

while(a < 1) 
{ 
    std::getline(infile, STRING); 
    while(STRING != previousLine && STRING.find(findString) != std::string::npos) 
    { 
       previousLine = STRING; 
       returnFile<<STRING<<"\n"; 
       std::cout<<STRING<<std::endl; 
    } 
} 

爲了解決這個問題出現的一個問題(無限循環),我又改變了代碼:

while(!infile.eof()) 
    { 
     std::getline(infile, STRING); 
     if(STRING != previousLine && STRING.find(findString) != std::string::npos) 
     { 
      previousLine = STRING; 
      returnFile<<STRING<<"\n"; 
      std::cout<<STRING<<std::endl; 
     } 
} 

內部,而在舊代碼中的語句是連續假的,因爲它是檢查文件中的每一行用於特定的字符串。循環繼續進行的唯一原因是外部while循環永遠不會是錯誤的。爲了解決這個問題,我改變了外部的while循環,以便檢查文件的結尾,一旦完成所有文件,結束循環。

再次感謝您的答案。堆棧溢出總是非常有幫助!

+1

將內部'while'改回爲'if':第一次通過循環後,'STRING == previousLine'因此不可能再次輪迴,當然? – Roddy

+0

我會解決這個問題,感謝您的評論。 –

1

看來這個問題可能與無限循環有關。

int a = 0; 
std::string previousLine = ""; 

while(a < 1) 
{ 
    // a needs to be incremented in here or it will loop forever! 
} 
+1

@ChrisFrank你可能只是使用'while(!infile.eof()){}'這是真的,直到文件的結尾,或'while(getline(infile,STRING)){}' –

+0

我修復了寫入問題到文件(我會更新我的問題中的代碼)。但是我仍然遇到了無限循環的問題。 –