methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

s/stdio.h/iostream/

C++でプログラムを書いているときのこと・・・.
ifstreamから1文字ずつ文字を引っ張ってくるんだけなんだけど、2つひっかかった。
一つ目.

    char c;
    while (ifs >> c) {
        // ...
    }
    ifs.seekg(0);
    while (ifs >> c) {
        // ...
    }

2回目が回らない。これは、ifsの中のeofというエラービットが残ってるから。

    }
    ifs.clear();
    ifs.seekg(0);
    while (ifs >> c) {

とやればうまくいく。

もうひとつは、whitespace. istream君は ifs >> c したときにwhitespaceを読み飛ばすので、fgetc()の代わりにならない。

    ifs >> noskipws;

とやればfgetc()の代わりになる。

C++覚えてもIOはstdio使うことが多かったから、iostreamの動作をきちんと覚えてないorz