C++ istream 関数

C Istream Guan Shu



C++ の「ストリーム」という用語は、プログラム スレッドと I/O 間の文字の流れを表します。 C++ ストリーム クラスは、IO デバイスおよびファイルでアクションを入力および出力するために必要です。これらのクラスは、プログラムの入力と出力を管理するように設計されており、特定の機能を備えています。

ストリーム クラスの階層

C++ クラスは、含まれるデータを管理および管理するために必要なメソッドで構成されています。

float、double、class は int と同様のデータ型です。データ型としてクラスを持つ一意の変数は、C++ オブジェクトと呼ばれます。事前に指定された特別なオブジェクト「cin」と「cout」には、データ型としてさまざまなクラスがあります。







「cout」に書き込まれたデータまたは「cin」から読み取られたデータは、C++ のプログラムに出入りするデータ フローの例です。現在、これについては次の 4 つのクラスを検討しています。



ストリーミングする
この入力ストリームは、あらゆる目的に使用できます。 istreamのイラストはcinです。



オストリーム
これは、いくつかの用途を持つ出力ストリームです。 Ostreams は、cout と cin の形で提供されます。





ストリームの場合
入力ファイルのストリームです。

ストリームの
これは、出力ファイルのストリームです。継承は、C++ などのオブジェクト指向プログラミングで頻繁に使用される概念であり、一部のクラスは既に作成されている他のクラスの特性を引き継ぎます。その後、祖先クラスは、新しい機能を含めることで、それ自体が特殊化されます。



ストリームクラスの場合
ifstream は、istream と同じように扱うことができます。

ストリームクラスの
ifstreams 関数と同じように、入力ではなく出力を使用することで、ofstream は出力ファイル ストリームになります。 ofstream は、構築され、開かれ、エラーがないことが確認された後、cout と同じ方法で使用されます。

イオスクラス
このクラスから、すべてのストリーム クラスが派生しました。入力ストリームと出力ストリームは 2 つの異なるタイプです。

これは、ios ベースでストリームの入力または出力ステータスに依存しないストリーム パーツを定義します。

ios ベースで説明されているメンバーとは対照的に、この部分ではテンプレート パラメーターに依存するメンバーについて説明します。

ストリーム(入力)
iostream ライブラリは複雑であるため、これらのレッスンですべてをカバーすることはできません。ただし、最もよく使用される機能を強調します。このセクションでは、入力クラス (istream) をさまざまな角度から見ていきます。

抽出演算子 (>>) を使用して、入力ストリームからデータを取得することを学びました。

ストリーム

C++ プログラミング言語では、入力ストリームは istream クラスによって処理されます。入力は、これらの入力ストリーム オブジェクトを使用して一連の文字として読み取られ、理解されます。入力は cin によって処理されます。

メンバー クラス

istream::セントリー
入力手順が実行されるたびに、多くのタスクを実行するクラス。そのデストラクタは、アクションを実行する必要はありません。ただし、実装では、sentry オブジェクトの作成と破棄を使用して、すべての入力操作で共有されるストリームで追加の起動またはクリーンアップ タスクを実行できます。

機能

istream::gcount
オブジェクトの最新のフォーマットされていない入力アクションから取得された文字数を示します。フォーマットされていない入力手続き (get、getline、ignore、peek、read、read some、putback、および unget) は、この関数によって返される値を変更します。ただし、peeks、putback、または unget を呼び出しても文字は抽出されないことに注意してください。その結果、カウントは常に 0 を返します。

istream::get
1 文字は、ストリームから 1 文字を取り出します。文字は、引数の値として設定されるか、返されます (最初の署名) (2 番目の署名)。

C 文字列: 区切り文字が存在する場合、それは入力シーケンスから削除されず、代わりに次の文字として保持され、存在する場合はストリームから取得されます。

istream::getline
ストリームから文字をフォーマットされていない入力として削除し、抽出された文字が区切り文字になるか、「n」文字が「s」に書き込まれるまで、それらを変数「s」に c-string として保存します。さらに、このメソッドは、ファイルの最後に到達すると文字の抽出を停止します。

内部的には、関数は入力シーケンスにアクセスする前にオブジェクトを作成します。最後に、オブジェクトを kill してから戻る前に、関連付けられたストリーム バッファ オブジェクトから文字を抽出し (すべてが正常であると仮定)、そのメンバー メソッドの sbumpc または sgetc のいずれかを実行するかのようにします。

istream::無視
文字は入力シーケンスから取得され、「n」文字が取り出されるか、1 文字が delim と等しくなるまで、一度に 1 つずつ破棄されます。さらに、ファイルの最後に到達すると、関数は文字抽出を停止します。このポイントに到達するのが早すぎる場合 (n 文字を抽出する前、または delim を検出する前)、関数は「eofbit」フラグを設定します。

入力シーケンスにアクセスする前に、関数はセントリー オブジェクトを内部で構築します (noskipws を使用すると true になります)。最後に、返される前にセントリー オブジェクトを強制終了し、関連付けられたストリーム バッファー オブジェクトから文字を抽出します (すべてが正常であると仮定します)。

istream::演算子>>
抽出演算子 (>>) は、この演算子を入力ストリームに適用します。関数としてのメンバーが多すぎます。

算術型

文字はストリームから取り出され、正しいタイプの値を表すために順次解析され、「val」の値として保存されます。入力シーケンスにアクセスする前に、関数はセントリー オブジェクトを内部で構築します (noskipws は false になります)。すべてが正常にチェックアウトされると、num get::get が実行され、ストリームの内部状態フラグを変更しながら、抽出と解析のプロセスが完了します。歩哨オブジェクトは、去る前に最終的に破壊されます。

この関数は、入力シーケンスを読み取る前に、sentry オブジェクトを内部的に生成します。これは、フォーマットされた入力を実行していると見なされます。最後に、返される前にセントリー オブジェクトを強制終了し、関連付けられたストリーム バッファー オブジェクトから文字を抽出します (すべてが正常であると仮定します)。

マニピュレーター

pf (*this) が呼び出されます。ここで、pf はマニピュレーターである可能性があります。マニピュレータは、このオペレータが呼び出されたときに呼び出されるように特別に作成されたルーチンです。入力シーケンスはこの手順の影響を受けず、文字は抽出されません。

istream::プットバック
復元された文字は、ストリームから取得された最後の文字が入力操作によって再び抽出されるように、カーソルをストリーム内の 1 文字下に移動しようとします。

入力シーケンスにアクセスする前に、関数はセントリー オブジェクトを内部的に構築します。次に、関連付けられたストリーム バッファ オブジェクトで sputbackc(c) を呼び出します (正常な場合)。歩哨オブジェクトは、去る前に最終的に破壊されます。

istream::読み取り
データ ブロックを読み取ります。

「n」文字はストリームから取得され、「s」が指す配列に格納されます。この関数は、データの内容を検査したり末尾にヌル文字を追加したりせずに、データのブロックを複製するだけです。

関数内では、入力シーケンスにアクセスする前に、sentry オブジェクトが最初に作成されます。最後に、返される前にセントリー オブジェクトを強制終了し、関連付けられたストリーム バッファー オブジェクトから文字を抽出します (すべてが正常であると仮定します)。

member count を呼び出すと、この関数が適切に読み取って格納した文字の総数が返されます。

istream::readsome
この関数は、ストリームにリンクされた特定のストリーム バッファ オブジェクトの内部動作に依存します。その動作は、標準クラスの実装定義がほとんどです。

関数内では、入力シーケンスにアクセスする前に、sentry オブジェクトが最初に作成されます。次に (成功した場合)、ストリーム バッファー オブジェクトのアベイルズでメンバー関数を呼び出して、現在使用可能な文字数を確認してから、'sbumpc' を呼び出してその文字数 (または sgetc) まで抽出します。歩哨オブジェクトは、去る前に最終的に破壊されます。

istream::seekg
入力行の位置によって、後続の文字が入力ストリームから引き出される場所が決まります。入力シーケンスを読み取る前に、関数は内部的に歩哨オブジェクトを構築します。次に (OK の場合)、対応するストリーム バッファ オブジェクトへの 2 つの呼び出しのいずれかを行います: pubseekpos (1) または pubseekoff (2) (存在する場合)。最後に、セントリー アイテムを消去して出発します。

istream::同期
入力バッファーを整列します。

リンクされたストリーム バッファの制御された入力シーケンスを同期させます。ストリームに接続されたストリーム バッファ オブジェクトの特定の実装によって、操作の詳細が決まります。

istream::tellg
入力シーケンスの位置を取得します。

入力ストリーム内の現在の文字の位置を示します。その後、関数は -1 を返します。メンバーが失敗した場合、true を返します。

(0,cur,in) でない場合は、rdbuf()->pubseekoff を返します。歩哨オブジェクトは、去る前に最終的に破壊されます。

istream::unget
キャラクターを削除:

ストリームから取得した最後の文字を入力操作で再度抽出できるように、カーソルをストリーム内の 1 文字下に移動しようとします。

非会員

オペレーター>> (istream)
抽出演算子 (>>) は、入力ストリームに適用されると、このアクションで書式設定された入力を提供します。

1 文字: 文字シーケンスは次の文字を取り出し、「c」の値として格納します。 is から文字を抽出し、それらを s に c-string として格納するプロセスは、空白文字が検出されるか (幅 ()-1) 文字が抽出されたときに停止します (幅がゼロでない場合)。

右辺値の抽出: 左辺値からの抽出と同じ結果を持つ右辺値 istream オブジェクトからの抽出を有効にします: is>>Val を呼び出します。

例 1

この場合、ユーザーから値を取得する方法を調べ、結果として画面に表示します。

#include
使用して 名前空間 標準 ;
整数 主要 ( )
{
整数 いいえ ;
カウト << 「数字を入力してください」 ;
食べる >> いいえ ;
カウト << '入力された値: ' << いいえ << ' \n ' ;
}

ヘッダー ファイルをインクルードします。次に、標準名前空間で名前空間「std」を使用します。関数 main() を呼び出します。このメソッド内で「no」という名前の変数が宣言されます。この変数は「int」データ型で表されます。 「int」という用語は、整数の省略形です。その後、「cout」ステートメントが使用されます。このコマンドは行を出力します。

このテキストが画面に表示された後、ユーザーはランダムな値を入力します。次に、「cin」ステートメントが使用されます。このコマンドでは、ユーザーが値を指定する必要があります。ユーザーが入力した番号は、変数に保存されます。ユーザーが指定した値は、「cout」コマンドを使用して画面に表示されます。

例 2

この例では、ユーザーから名前を取得し、結果として画面に表示する方法を確認します。

#include
使用して 名前空間 標準 ;

整数 主要 ( )

{

チャー 名前 [ 125 ] ;
カウト << 'あなたの名前を入力してください' << エンドル ;


食べる >> ws ;

食べる . getline ( 名前、 125 ) ;

カウト << 名前 << エンドル ;

戻る 0 ;

}

ヘッダー ファイル を組み込みます。次に、標準の名前空間を「std」として利用します。 main() 関数を呼び出します。このメソッド内で、変数を宣言します。この変数は「char」データ型を保持します。次に、「cout」ステートメントが使用されます。このコマンドは、画面に「Enter your name」というテキストを表示します。このテキストを画面に表示した後、ユーザーは任意の名前を入力します。次に、「cin」ステートメントを使用します。

このコマンドは、ユーザーから値を取得します。指定された名前は、変数「ws」に格納されます。ここでも、「cin」コマンドを使用します。このコマンド内で、getline() 関数が適用されています。この関数には、ユーザーが入力した名前と名前の長さを含むパラメーターが含まれています。 「cout」コマンドは、ユーザーが提供した名前を表示するために使用されます。コードを終了するには、「return 0」コマンドが使用されます。

結論

最初に、C++ istream 関数とは何かについて説明しました。次に、言及されているいくつかの機能と重要な定義を観察します。この記事では、さまざまな istream 関数を含むさまざまなコードを実行しました。最初のコードでは、ユーザーから任意の番号を取得し、その番号を画面に表示します。 2 番目の例では、ユーザーが名前を入力し、その名前を画面に出力しました。