2010-05-04 60 views
18

我有一個讀取文件的代碼,這些文件的浮點數存儲如下:「3.34 | 2.3409 | 1.0001 | ... | 1.1 |」。我想用istringstream閱讀它們,但它不工作,我期望:C++ - 重複使用istringstream

string row; 
    string strNum; 

    istringstream separate; // textovy stream pro konverzi 

    while (getline(file,row)) { 
     separate.str(row); // = HERE is PROBLEM = 
     while(getline(separate, strNum, '|')) { // using delimiter 
     flNum = strToFl(strNum); // my conversion 
     insertIntoMatrix(i,j,flNum); // some function 
     j++; 
     } 
     i++; 
    } 

在標記點,行被複制到獨立的流只有第一次。在下一次迭代中它不起作用,它什麼都不做。我預計可以多次使用,而無需在每次迭代中構建新的istringstream對象。

回答

24

行設置成istringstream ...

separate.str(row); 

後...致電

separate.clear(); 

這將清除在前面的迭代,或通過設置設置的任何iostate標誌復位字符串。 http://www.cplusplus.com/reference/iostream/ios/clear/

+1

非常感謝。這是我在很多代碼中缺少的非常重要的信息;) – Naomak 2010-05-04 20:26:09

+0

它確實需要在之後嗎?我想你也可以先清除它。 – CashCow 2014-01-22 18:54:58

5

您需要separate.str(row)後添加separate.clear();線路開通狀態位,否則eofbit獲取設置和後續讀取失敗。