2010-05-04 63 views
18

Tôi có mã để đọc tệp có số phao trên đường được lưu trữ như sau: "3.34 | 2.3409 | 1.0001 | ... | 1.1 |". Tôi muốn đọc chúng bằng cách sử dụng istringstream, nhưng nó không hoạt động như tôi mong đợi:C++ - liên tục sử dụng 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++; 
    } 

Trong điểm được đánh dấu, hàng được sao chép vào dòng riêng biệt chỉ lần đầu tiên. Trong lần lặp tiếp theo, nó không hoạt động và nó không làm gì cả. Tôi hy vọng nó có thể được sử dụng nhiều lần mà không cần xây dựng đối tượng istringstream mới trong mỗi lần lặp.

Trả lời

24

Sau khi thiết lập hàng vào istringstream ...

separate.str(row); 

... reset nó bằng cách gọi

separate.clear(); 

này xóa bất kỳ cờ iostate được thiết lập trong phiên trước đó hoặc bằng cách thiết lập chuỗi. http://www.cplusplus.com/reference/iostream/ios/clear/

+1

Cảm ơn rất nhiều. Đó là thông tin rất quan trọng mà tôi đã bị thiếu trong nhiều mã số;) – Naomak

+0

Liệu nó có thực sự cần phải theo sau? Tôi nghĩ rằng bạn có thể xóa nó trước khi quá. – CashCow

5

Bạn cần phải thêm một dòng separate.clear(); sau separate.str(row) để xóa các bit trạng thái, nếu không thì eofbit được thiết lập và sau đó đọc thất bại.

Các vấn đề liên quan