std::cinとstd::coutの適切な使い方
標準ストリームで入出力を行い、よくある落とし穴を避けます。
「std::cinとstd::coutの適切な使い方」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
iostream ヘッダー
std::cin と std::cout は、どちらも <iostream> ヘッダーのオブジェクトです。ターミナルの標準入力ストリームと標準出力ストリームを表します。
std::cout で出力する
<< を使って値を std::cout にストリーム出力します。operator<< のオーバーロードがある型なら利用でき、すべての組み込み型と std::string が含まれます。
int age = 30;
std::string name = "Ada";
std::cout << "Name: " << name << ", Age: " << age << "\n";std::cin で入力する
std::cin >> variable で値を読み取ります。空白がトークンの区切りになります。
int age;
std::string name;
std::cout << "Enter name and age: ";
std::cin >> name >> age;
std::cout << name << " is " << age << "\n";空白の読み飛ばし
デフォルトでは、>> は読み取り前に先頭の空白(スペース、タブ、改行)を読み飛ばします。通常は便利ですが、1 文字を読み取る場合は注意してください。
行全体を読み取る
std::cin >> name で読み取れるのは 1 単語だけです。空白を含む行を読み取るには、std::getline を使用します。
std::string line;
std::getline(std::cin, line);
std::cout << "You said: " << line;>> と getline の混在: よくあるバグ
std::cin >> n の後も、改行文字はバッファーに残ります。次の getline は空の文字列を読み取ります。先に改行文字を取り除いてください。
int n;
std::cin >> n;
std::cin.ignore(); // consume the leftover newline
std::string line;
std::getline(std::cin, line);ストリームの状態
ストリームには good、eof、fail、bad の状態ビットがあります。抽出後もストリームが使用可能かどうかは、if (std::cin) で確認してください。
EOF を検出する
EOF は、Unix では Ctrl+D、Windows では Ctrl+Z で通知されます。ストリームが正常な間ループして、すべての入力を処理してください。
int n;
while (std::cin >> n) {
std::cout << n * 2 << "\n";
}競技プログラミング向けの高速 I/O
競技プログラミングで読み取りを高速化するには、C の stdio との同期を無効にします。cin と cout の tie も解除してください。
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);std::endl と \n の再確認
std::endl は改行を書き込み、バッファーをフラッシュします。"\n" は改行を書き込むだけです。性能を維持するため、ループでは "\n" を使用してください。
手動でフラッシュする
改行せずにフラッシュする必要がある場合は、std::flush を使用します。進捗インジケーターに便利です。
for (int i = 0; i < 100; ++i) {
std::cout << "\r" << i << "%" << std::flush;
// ... work ...
}確認問題
出力における std::endl と "\n" の違いは何ですか。
まとめ
<< と std::cout を使って出力し、>> と std::cin を使ってトークンを読み取ります。行全体を読み取るには std::getline を使用し、数値入力の後に残った改行は cin.ignore() で取り除いてください。
よくある質問
「std::cinとstd::coutの適切な使い方」レッスンは無料ですか?
はい。「std::cinとstd::coutの適切な使い方」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「std::cinとstd::coutの適切な使い方」で何を学びますか?
標準ストリームで入出力を行い、よくある落とし穴を避けます。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「std::cinとstd::coutの適切な使い方」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::cinとstd::coutの適切な使い方
- iomanipによる出力の書式設定
- getlineで安全に入力を読み取る
- std::cerrとstd::clogを扱う