2010-05-04 7 views
18

Şunun gibi depolanmış satırdaki float numaralarını okuyabilmek için bir kodum var: "3.34 | 2.340 | | 1.000 | | | 1.1 |". Ben istringstream kullanarak bunları okumak istiyorum ama beklediğiniz gibi çalışmıyor: işaretli noktadaC++ - istringstream'i tekrar tekrar kullanarak

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++; 
    } 

, sıra ayrı akımına sadece ilk sefer içine kopyalanır. Sonraki yinelemede işe yaramıyor ve hiçbir şey yapmıyor. Her iterasyonda yeni istringstream nesnesi oluşturmadan daha fazla kez kullanılmasının mümkün olacağını bekledim.

cevap

24

... istringstream içine

separate.str(row); 

satır ayarladıktan sonra ... Bu önceki yineleme ya ayarlayarak ayarlanır herhangi iostate bayrakları temizler

separate.clear(); 

arayarak sıfırlamak dize. http://www.cplusplus.com/reference/iostream/ios/clear/

+1

Çok teşekkürler. Bu, birçok kodda eksik olduğum çok önemli bir bilgidir;) – Naomak

+0

Gerçekten de olsa sonra olmak zorunda mı? Bence bunu daha önce de temizleyebilirsin. – CashCow

5

aksi halde eofbit set alır, durum bitlerini temizlemek için separate.str(row) sonra separate.clear(); satır eklemem gerekiyor ve müteakip başarısız okur.