21

「3.34|2.3409 | 1.0001 | ... |1.1|」のように格納された行にフロート番号を持つファイルを読み取るためのコードがあります。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オブジェクトを作成しなくても、より多くの回数使用できると期待していました。

4

2 に答える 2

30

行をistringstreamに設定した後...

separate.str(row);

...を呼び出してリセットします

separate.clear();

これにより、前の反復で、または文字列を設定することによって設定されたiostateフラグがすべてクリアされます。 http://www.cplusplus.com/reference/iostream/ios/clear/

于 2010-05-04T17:02:36.713 に答える
5

ステータスビットをクリアするには、separate.clear();後に行を追加する必要があります。そうしないと、 getsが設定され、後続の読み取りが失敗します。separate.str(row)eofbit

于 2010-05-04T17:03:20.483 に答える