2013-12-12 33 views
0

我無法讓istringstream在下面顯示的while循環中繼續。數據文件也顯示在下面。我使用輸入文件中的getline獲取第一行並將其放入istringstream lineStream中。它通過while循環一次,然後讀入第二行並返回到循環的開始處並退出而不是繼續循環。我不知道爲什麼,如果有人能幫助我,我會感激。 編輯:我有這個while循環條件的原因是因爲該文件可能包含錯誤的數據行。因此,我想確保我正在閱讀的行具有以下在數據文件中顯示的正確形式。istringstream不輸出正確的數據

while(lineStream >> id >> safety){//keeps scanning in xsections until there is no more xsection IDs 

    while(lineStream >> concname){//scan in name of xsection 
     xname = xname + " " +concname; 
    } 


    getline(InputFile, inputline);//go to next xsection line 
    if(InputFile.good()){ 
     //make inputline into istringstream 
     istringstream lineStream(inputline); 
     if(lineStream.fail()){ 
      return false; 
     } 
    } 
} 

數據文件

4 0.2 speedway and mountain 
7 0.4 mountain and lee 
6 0.5 mountain and santa 
+1

我認爲你有太多的混亂文件讀取操作可能不連貫彼此。 –

+0

lineStream需要在頂部/全局聲明,而不是底部聲明,或者僅在 – user2976089

+0

的塊中可用。有什麼令人困惑的? – ddwong

回答

1

在所提出的代碼,…

while(lineStream >> id >> safety){//keeps scanning in xsections until there is no more xsection IDs 

    while(lineStream >> concname){//scan in name of xsection 
     xname = xname + " " +concname; 
    } 

    getline(InputFile, inputline);//go to next xsection line 
    if(InputFile.good()){ 
     //make inputline into istringstream 
     istringstream lineStream(inputline); 
     if(lineStream.fail()){ 
      return false; 
     } 
    } 
} 

… lineStream的內部聲明聲明瞭一個局部對象,當執行超出該塊時該局部對象不再存在,並且不影響外循環中使用的流。


一個可能的解決辦法是反轉代碼一點點,像這樣:

while(getline(InputFile, inputline)) 
{ 
    istringstream lineStream(inputline); 

    if(lineStream >> id >> safety) 
    { 
     while(lineStream >> concname) 
     { 
      xname = xname + " " +concname; 
     } 
     // Do something with the collected info for this line 
    } 
} 
+0

不,我在我的原始評論中提到: 「我使用輸入文件中的getline獲取第一行,並將它放在istringstream lineStream中,它通過while循環一次...」 這意味着我聲明瞭lineStream整個循環,然後放在那裏。 除非你的意思是「if(InputFile.good()){} 編輯:我明白你的意思,我會試試 – ddwong

+0

我不知道如何更清楚地解釋它,抱歉,我現在唯一的補充建議是嘗試在你的腦海中執行你當前的代碼,然後按照計算機的步驟一步一步機械地完成它,以便你可以說服自己,上面的解釋是有意義的,正確 –

+0

對不起,我編輯了我原來的評論後看到你的編輯。我已經通過調試器機械地通過它,我正在嘗試你的方法。 – ddwong