« 2009年11月 | トップページ | 2010年1月 »

2009年12月の1件の記事

【C/C++】 streamクラスのeofメンバ

以下の記事でstreamクラスのeofの扱いが難しいという記事を書いたんやけど、まぁこれやったらと許容できる方法を考えたので載せておこう。

【C/C++】ifstreamのeofメンバ関数(違和感のある挙動)

ちなみに以前はifstreamについて書いたんやけど、調べてみるとstream系のeofは全て同じ実装みたい。
つまり、実際に最終要素にアクセスした後でないと、正確なeofを検出できないと。

そこで、以下のようにすると、うまく動きます。
ん〜、読み出し部分が2行あって気持ち悪いけど、一応これやったらちゃんと対応できてると思うんよね。

istringstream s(buff);
string line;

s >> line;                <-- ミソ
while( !s.eof() ) {
    〜何らかの処理〜
    s >> line;
}

単純にwhileループをeofメンバで終了判定するのやけど、その時にwhile文の直前に一回読み出しを行ってしまおうと。

要素数が0の場合:  while文に入らず終了(処理されない)
要素数が1の場合:  while文に入り処理が1回実行。次のループ条件が偽になりループから抜ける。
要素数が2の場合:  上記の繰り返し

という事で、うまく行きそうですな。
ん〜、なるほど。こういう思想で設計されているんやね。

« 2009年11月 | トップページ | 2010年1月 »