basic_istream::get(文字列の取得)

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