名前空間
変種
操作

std::basic_istream::get

提供: cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
int_type get();
(1)
basic_istream& get( char_type& ch );
(2)
basic_istream& get( char_type* s, std::streamsize count );
(3)
basic_istream& get( char_type* s, std::streamsize count, char_type delim );
(4)
basic_istream& get( basic_streambuf& strbuf );
(5)
basic_istream& get( basic_streambuf& strbuf, char_type delim );
(6)

ストリームから文字を抽出します。

すべてのバージョンが UnformattedInputFunction として動作します。 sentry オブジェクトの構築および確認の後、以下のように動作します。

1) 文字をひとつ読み込み、利用可能であればそれを返します。 そうでなければ、 Traits::eof() を返し、 failbit および eofbit をセットします。
2) 文字をひとつ読み込み、利用可能であればそれを ch に格納します。 そうでなければ、 ch は変更されず、 failbit および eofbit をセットします。 書式付き文字入力の operator>> と異なり、この関数は signed char および unsigned char 型に対してオーバーロードしていないことに注意してください。
3) get(s, count, widen('\n')) と同じです。 つまり、 '\n' が見つかるまで最大 count-1 個の文字を読み込み、それを s の指す文字列に格納します。
4) 文字を読み込み、それを最初の要素が s によって指されている文字配列の連続する位置に格納します。 文字は以下のいずれかが発生するまで抽出され格納されます。
  • n-1 個の文字が格納された。
  • 入力シーケンスでファイル終端状況が発生した (setstate(eofbit) が呼ばれます)。
  • 次の利用可能な入力文字 cTraits::eq(c, delim) によって判定されるように delim と等しい。 この文字は (basic_istream::getline() と異なり) 抽出されません。
1文字も抽出されなかった場合は setstate(failbit) を呼びます。 いずれの場合でも、 count>0 であれば、配列の連続する次の位置にヌル文字 (CharT()) が格納されます。
5) get(strbuf, widen('\n')) と同じです。 つまり、 '\n' が見つかるまで利用可能な文字を読み込み、それを指定された basic_streambuf オブジェクトに挿入します。
6) 文字を読み込み、それを指定された basic_streambuf オブジェクトによって制御されている出力シーケンスに挿入します。 文字は以下のいずれかが発生するまで抽出され strbuf に挿入されます。
  • 入力シーケンスでファイル終端状況が発生した。
  • 出力シーケンスへの挿入が失敗した (この場合、挿入される予定だった文字は抽出されません)。
  • 次の使用可能な文字が Traits::eq(c, delim) によって判定されるように delim と等しい。 この文字は抽出されません。
  • 例外が発生した (この場合、例外はキャッチされ、投げ直されません)。
1文字も抽出されなかった場合は setstate(failbit) を呼びます。

すべてのバージョンは gcount() の値を抽出された文字数に設定します。

目次

[編集] 引数

ch - 結果を書き込む文字への参照
s - 文字を格納する文字列へのポインタ
count - s の指す文字列のサイズ
delim - 抽出を停止する区切り文字。 この文字は抽出されず、格納されません
strbuf - 内容を読み込む先のストリームバッファ

[編集] 戻り値

1) 抽出された文字、または Traits::eof()
2-6) *this

[編集] 例外

エラーが発生し (エラー状態フラグが goodbit でなく)、その状態に対して投げるために exceptions() がセットされている場合は failure

内部の操作が例外を投げた場合、それはキャッチされ、 badbit がセットされます。 exceptions()badbit に対してセットされていれば、その例外が投げ直されます。

[編集]

#include <sstream>
#include <iostream>
 
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // reads 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // reads 'e'
    char str[5];
    s1.get(str, 5);     // reads "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

出力:

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

[編集] 関連項目

文字のブロックを抽出します
(パブリックメンバ関数) [edit]
書式付きデータを抽出します
(パブリックメンバ関数) [edit]
文字と文字配列を抽出します
(関数テンプレート) [edit]