C++ 基本的な入出力: Cout、Cin、Cerr の例

⚡ スマートサマリー

C++ 入出力操作は、プログラムとデバイス間でデータをバイトシーケンスとして転送するストリームオブジェクトに依存しており、cinはキーボード入力を読み取り、cout、cerr、clogは画面に出力を書き込む。

  • 🔘 ストリーム: 入出力タスクは、ストリームと呼ばれるバイト列として伝送され、メインメモリとデバイス間でデータを移動させる。
  • 📥 ヘッダーファイル: iostream、iomanip、およびfstreamライブラリは、基本的な入出力に使用されるオブジェクトとマニピュレータを定義します。
  • 🖨️ coutとcin: cout オブジェクトは挿入演算子で出力し、cin オブジェクトは挿入演算子で値を読み取ります。trac変換オペレーター。
  • ⚠️ cerrとclog: どちらもエラーを報告するが、cerrはバッファリングせずに即座に表示するのに対し、clogはメッセージを先にバッファリングする。
  • 🛠️ エラー処理: 正常、異常、失敗、およびEOFチェックはストリームの状態を読み取るため、失敗した操作は安全に捕捉されます。
  • 🤖 AI支援: GitHub CopilotのようなAIコーディングアシスタントは、短いコメントや関数名からcinとcoutの定型コードを生成します。

C++ 基本的な入出力

ストリームとは何か C++?

C++ は、入出力タスクを実行するために使用できる多数のライブラリをユーザーに提供します。これらのタスクは、一般にストリームと呼ばれるバイト シーケンスの形式で実行されます。

ストリームは XNUMX つに分かれています。

ストリームの種類

  • 入力ストリーム: これは、バイトがキーボードなどのデバイスからメイン メモリに流れるストリームの一種です。
  • 出力ストリーム: これは、バイトが逆方向、つまりメイン メモリからディスプレイ画面などのデバイスに流れるストリームの一種です。

ストリームはどのように機能するのでしょうか?

C++ ストリームは次のように動作します。

  1. まず、ストリームが正しい型で初期化されます。
  2. 次に、get/putポインタを使用して、入出力が行われる場所を指定する必要があります。
  3. ストリーム内の適切な場所に到達したら、それぞれ >> 演算子と << 演算子を使用して入力タスクと出力タスクを実行できます。

機能表

以下は、stream.h ヘッダー ファイルで提供される関数です。

CLASS機能
ファイルバフファイルバッファを読み取り/書き込み用に設定します。close() および open() 関数があります。
fストリームベースこれは、ifstream、fstream、ofstream クラスの基本クラスです。その操作はファイル ストリームに共通です。
イフストリームこれは入力操作を提供するための入力ファイル ストリーム クラスです。
のストリームこれは出力操作を提供するための出力ファイル ストリーム クラスです。
ストリームこれは入出力ストリーム クラスです。同時入出力操作をサポートします。

C++ 入力/出力用のヘッダーファイル

C++ 基本的な入出力タスクを実行するための関数を備えた 3 つのライブラリを提供します。これらには次のものが含まれます。

  • イオストリーム: これは、標準入出力ストリームの頭字語です。 このヘッダー ファイルには、cin/cout/cerr などのオブジェクトの定義が含まれています。
  • イオマニプ: これは、Input/Output Manipulator の頭字語です。 ライブラリには、ストリームの操作に使用できる関数が付属しています。 これには、setw、setprecision などのオブジェクトの定義が含まれています。
  • Fストリーム: ファイルストリームを記述するためのヘッダファイルです。 ファイルから読み取られるデータを入力として処理するか、ファイルに書き込まれるデータを出力として処理します。

cinとcoutのキーワードは、 C++これらはそれぞれ入力の取得と出力の印刷に使用されます。これらを使用するには、プログラムにiostreamヘッダーファイルを含める必要があります。その理由は、これらがそのヘッダーファイルで定義されているためです。iostreamヘッダーファイルをインクルードしないとエラーが発生します。これは、 C++ コンパイラがキーワードの意味を理解する必要があります。

iostream ヘッダー ファイルで定義されている主なオブジェクトは、cin、cout、cerr、および clog です。 それらについて話し合いましょう。

std :: cout

cout オブジェクトは、iostream クラスのインスタンスです。これは、標準出力デバイス (通常は画面) に出力を生成するために使用されます。ストリーム挿入演算子 (<<) と一緒に使用されます。

例:

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

出力:

std :: cout

コードのスクリーンショットは次のとおりです。

std :: cout

Code 説明:

  1. cout オブジェクトが定義されている iostream ヘッダー ファイルをインクルードします。
  2. std 名前空間を含めると、そのクラスを使用するときにそれを呼び出す必要がなくなります。
  3. main() 関数を呼び出します。 プログラムコードは本体内に追加する必要があります。 開始中括弧 { は本体の始まりを示します。
  4. 「Welcome to」という文字列を保持する「welcome」という名前の文字変数を作成します。 Guru99.
  5. 文字列 welcome の値をコンソールに出力します。endl は C++ 行の終了を意味するキーワード。カーソルを移動して次の行のテキストの印刷を開始します。
  6. プログラムは、実行が成功したときに値を返す必要があります。
  7. 関数 main() の本体の終わり。

std::cin

cin オブジェクトは istream クラスのインスタンスです。入力デバイスであるキーボードから入力を読み取ります。通常は ex と組み合わせて使用​​されます。trac演算子(>>)。traction オブジェクトは、ex を担当しますtraccinオブジェクトからキーボード経由で入力されたデータを取得します。

例:

次の例は、cinキーワードの使用方法を示しています。 C++:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

出力:

std::cin

コードのスクリーンショットは次のとおりです。

std::cin

Code 説明:

  1. iostream ヘッダー ファイルをプログラムにインクルードします。 cin オブジェクトはこのヘッダー ファイルで定義されます。
  2. そのクラスを使用するには、std 名前空間を含めます。 std のクラスを使用するときに std を呼び出す必要はありません。
  3. main() 関数を呼び出します。 プログラムコードは本体内に追加する必要があります。
  4. プログラム本体の始まり。
  5. 宣言する 整数変数 名前付きの番号。
  6. ユーザーに番号の入力を求めるメッセージを画面に表示します。
  7. ユーザーがコンソールにキーボードから入力した値を読み取ります。
  8. 上で読み取った値を他のテキストと一緒にコンソールに出力します。
  9. プログラムが正常に実行された場合、プログラムは値を返す必要があります。
  10. main関数の本体の終わり。

std::cerr

cerrオブジェクトは、エラーを出力するための標準エラーストリームを形成します。 C++. Cerr は ostream クラスのインスタンスです。cerr オブジェクトはバッファリングされません。つまり、エラー メッセージをすぐに表示する必要がある場合に使用されます。

バッファリングされないため、後で表示するためにエラー メッセージは保存されません。ストリーム挿入演算子 (<<) と一緒に使用されます。

例:

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

出力:

std::cerr

コードのスクリーンショットは次のとおりです。

std::cerr

Code 説明:

  1. cerr オブジェクトが定義されている iostream ヘッダー ファイルをインクルードします。
  2. std 名前空間を含めると、そのクラスを使用するときにそれを呼び出す必要がなくなります。
  3. main() 関数を呼び出します。 プログラム ロジックは本体内に追加する必要があります。 左中括弧は、関数本体の始まりを示します。
  4. cerr オブジェクトを使用して、コンソールにエラーを出力します。
  5. プログラムは、実行が成功すると値を返す必要があります。
  6. main関数の本体の終わり。

std::詰まり

clog オブジェクトは ostream クラスのインスタンスです。標準ディスプレイであるモニターにエラーを表示するために使用されます。cerr オブジェクトに似ていますが、バッファリングされています。バッファリングされているため、バッファがいっぱいになるかフラッシュされるまで、エラー メッセージをバッファに格納します。ストリーム挿入演算子 (<<) と一緒に使用されます。

例:

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

出力:

std::詰まり

コードのスクリーンショットは次のとおりです。

std::詰まり

Code 説明:

  1. clog オブジェクトが定義されている iostream ヘッダー ファイルを含みます。
  2. std 名前空間を含めると、呼び出さずにそのクラスを使用できるようになります。
  3. main() 関数を呼び出します。 プログラム ロジックは本体内に追加する必要があります。 { は関数本体の始まりを示します。
  4. clog オブジェクトを使用して、標準出力であるモニターにエラーを出力します。
  5. プログラムは正常に完了すると値を返す必要があります。
  6. 関数 main() の本体の終わり。

IOストリームによるエラー処理

同じストリームオブジェクトは、操作が成功したかどうかも報告し、ストリームの状態チェックによってそれが明らかになります。

ストリームが有効かどうかを確認するには、ストリームをブール値として使用できます。

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

ストリームのステータスの詳細を取得するには、次の関数を使用できます。

  • Good() - すべてが問題なければ true を返します。
  • bad() - 致命的なエラーが発生した場合は true を返します。
  • fail() - ストリーム操作が失敗した後に true を返します。
  • eof() - ファイルの終わりに達すると true を返します。

特定の読み取り/書き込み操作が失敗したかどうかを確認するには、読み取り結果をテストします。

たとえば、ユーザーが有効な整数を入力したかどうかを確認するには、次のようにします。

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

よくあるご質問

coutオブジェクトは型安全であり、挿入演算子を使用するため、各値の型を自動的に検出します。C言語のprintfは、%dなどの書式指定子に依存しており、これらの指定子は引数と手動で一致させる必要があります。

extraction演算子は最初のスペースで停止するため、cinは1単語しか読み取りません。スペースを含む行全体をキャプチャするには、getline(cin, variable)を呼び出します。これは改行文字まで読み取ります。

どちらも新しい行を開始しますが、endl は毎回出力バッファをフラッシュするため、ビジーループの処理速度が低下する可能性があります。通常の改行を使用し、endl はバッファをすぐにフラッシュする必要がある場合にのみ使用することをお勧めします。

cin、cout、cerr、clog オブジェクトは std 名前空間に属します。名前空間 std を使用して記述すると、std::cout ではなく cout と入力できます。大規模なプロジェクトでは、名前の衝突を避けるために、明示的に std プレフィックスを使用することがよくあります。

iomanip ヘッダーを含め、cout でマニピュレータを使用してください。setw マニピュレータはフィールド幅を予約し、setprecision は表示される桁数を設定することで、格納されている値を変更せずに数値と列の書式を設定します。

はい。coutとcerrは別々のストリームなので、シェルは通常の出力をファイルにリダイレクトしつつ、エラーは画面に表示することができます。コードでは、rdbufを使ってストリームを別のバッファに向けることができます。

はい。AIコーディングアシスタントは、コメントまたは関数名を読み取り、cinおよびcoutステートメント、iostreamのインクルード、およびフォーマットされたプロンプトを生成します。 Revエッジケースに対する生成されたストリームロジックを確認することは賢明です。

Yes. GitHubコパイロット 入力と同時に、coutのフォーマット、cinの検証ループ、cerrのエラーチェックを完了します。2026年です。 C++ コードインテリジェンスは意味的な記号認識機能を追加するため、複数ファイルに対する提案の一貫性が保たれます。