basic_istream::getには、文字列を取得できるオーバーロードメンバ関数がある。
basic_istream::get - cpprefjp C++日本語リファレンス
これで、
$ cat test.txt ABC DEF GHI$
catでこのように見えるテキストファイルを行文字列ごとに取得できるか試してみる。
今回、ファイルなので、ifstreamで読み込む。(ifstreamもbasic_istreamの派生。)
basic_istream::getを2回やって2行読み込めるか、fail状態になるかチェック。
$ ls basic_istream basic_istream.cpp test.txt $ cat test.txt ABC DEF GHI$ vi basic_istream.cpp $ g++ basic_istream.cpp -o basic_istream $ ./basic_istream ABC fail $
わかっていたから、こういうプログラムにしたけど、やはり2行目が読み込めずfail状態。
どうもgetの場合は、読み込み後のファイルポインタの位置が区切り文字より前になっている模様。
(区切り文字のないオーバーロードメンバ関数は、改行('\n')が区切り文字。)
Sample/cpp/basic_istream/get_1/src/basic_istream at master · bg1bgst333/Sample · GitHub