ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
std::cinは、C++でキーボードからの入力を受け取るための標準入力ストリームです。cin >> 変数;と書くことで、利用者がキーボードに打ち込んだ値を変数へ読み込めます。
| この記事の要点 |
|---|
|
std::cinとは
std::cinは、C++の標準ライブラリが用意している標準入力ストリームです。プログラムを実行する利用者がキーボードから入力した文字列を、プログラム内の変数へ取り込む役割を持ちます。使うには<iostream>ヘッダをインクルードします。
cinは名前空間stdに属するため、正式にはstd::cinと書きます。ファイル先頭にusing namespace std;を書いた場合はcinと省略できますが、本記事では区別が分かりやすいよう必要に応じてstd::を付けて表記します。
画面への出力を担うstd::coutと対になる存在で、coutが「出力(output)」、cinが「入力(input)」を担当します。
基本的な使い方
もっとも基本的な形は次のとおりです。cinのあとに抽出演算子>>を書き、その右に値を受け取る変数を指定します。
|
#include <iostream> int main() { int x; std::cout << "整数を入力: "; std::cin >> x; // キーボードから値を読み込む std::cout << "入力された値: " << x << std::endl; return 0; } |
実行すると「整数を入力: 」と表示され、利用者が数値を打ち込んでEnterキーを押すと、その値が変数xに格納されます。5と入力すれば「入力された値: 5」と表示されます。
このとき>>は、変数xの型(ここではint)に合わせて入力を解釈します。intなら整数として、doubleなら小数として、std::stringなら文字列として読み取ります。
複数の値を続けて入力する
>>は連結して書けます。1行に複数の変数を並べると、入力を順番に読み込みます。
|
#include <iostream> int main() { int a, b; std::cout << "2つの整数を入力: "; std::cin >> a >> b; std::cout << "合計: " << (a + b) << std::endl; return 0; } |
3 5のように空白で区切って入力しても、3(改行)5のように改行で区切って入力しても、どちらもaに3、bに5が入ります。これは>>が空白(スペース・タブ・改行)を区切りとして扱うためです。
抽出演算子(>>)の区切りの仕組み
>>は、入力の先頭にある空白を読み飛ばしてから値を1つ読み取り、次の空白の手前で読み取りを止めます。そのため、空白を含む文字列を1つの変数で受け取ることはできません。
|
std::string word; std::cin >> word; // "Hello World" と入力しても word には "Hello" だけが入る |
上の例で「Hello World」と入力した場合、wordには最初の単語Helloだけが格納され、Worldは入力ストリームに残ります。
空白を含む行を読む(std::getline)
スペースを含む1行全体を読み込みたいときは、>>ではなくstd::getlineを使います。std::getline(std::cin, 文字列)と書くと、改行までの1行をまるごとstd::stringに読み込みます(末尾の改行は文字列に含まれません)。
|
#include <iostream> #include <string> int main() { std::string line; std::cout << "名前を入力: "; std::getline(std::cin, line); std::cout << "こんにちは、" << line << "さん" << std::endl; return 0; } |
これなら「山田 太郎」のように空白を含む入力も、そのままlineに格納できます。std::stringを使うには<string>ヘッダのインクルードが必要です。
入力に失敗したときの処理
変数の型と合わない入力(例えばint変数に対して「abc」と入力)があると、cinは失敗状態になり、それ以降の入力を受け付けなくなります。失敗したかどうかはcin.fail()、またはcin自体を条件式に置くことで判定できます。
失敗状態から復帰するには、まずcin.clear()でエラーフラグを解除し、続いてcin.ignore()で入力に残っている不正な文字を読み捨てます。
|
#include <iostream> #include <limits> int main() { int n; std::cout << "整数を入力: "; if (!(std::cin >> n)) { // 入力が整数でなければ true std::cout << "整数ではありません" << std::endl; std::cin.clear(); // エラーフラグを解除 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 残りを読み捨て } else { std::cout << "入力された値: " << n << std::endl; } return 0; } |
cin.ignore()にstd::numeric_limits<std::streamsize>::max()と'\n'を渡すと、「改行が現れるまで(または読み取り上限まで)読み捨てる」という指定になります。std::numeric_limitsを使うには<limits>ヘッダが必要です。
coutとの対応(関連)
std::cinはキーボードからの入力を担い、std::coutは画面への出力を担います。両者は対になっており、演算子も対応しています。
| 対象 | ストリーム | 演算子 | 向き |
|---|---|---|---|
| 入力 | std::cin |
抽出演算子 >> |
入力 → 変数 |
| 出力 | std::cout |
挿入演算子 << |
値 → 画面 |
演算子の向きを「データが流れる方向」と覚えると分かりやすく、cin >> xはデータがxへ向かい、cout << xはデータがcoutへ向かう、というイメージになります。
よくある落とし穴
| 注意点 | 内容 |
|---|---|
>>の後にgetline |
cin >>は入力末尾の改行を読み残します。直後にstd::getlineを呼ぶと、その残った改行を空行として読み込んでしまいます。間にstd::cin.ignore()を入れて改行を読み捨ててからgetlineを使います。 |
| 型の不一致でfail | int変数に「abc」のような文字を入力すると失敗状態になり、以降のcinがすべて素通りします。cin.clear()とcin.ignore()で復帰させない限り入力を受け付けません。 |
| 数値と文字列の混在 | 数値を>>で読んだ後に文字列を行単位で読む処理が続く場合、上記の改行残りの問題が起きやすくなります。入力方法を統一するか、改行の読み捨てを忘れないようにします。 |
FAQ
Q. cinとstd::cinはどちらを書けばよいですか。
A. どちらも同じものを指します。using namespace std;を書いている場合はcinと省略でき、書いていない場合はstd::cinと書く必要があります。大規模なコードでは名前の衝突を避けるため、std::を付けて書く方が安全とされています。
Q. スペースを含む文字列が途中までしか入力されません。
A. cin >>は空白を区切りとして扱うため、最初の単語までしか読み込みません。スペースを含む1行を読みたい場合はstd::getline(std::cin, 文字列)を使ってください。
Q. getlineを使ったら最初の1回が空になってしまいます。
A. 直前にcin >>で数値などを読み込んでいる場合、入力に残った改行をgetlineが読み取ってしまうことが原因です。cin >>のあとにstd::cin.ignore()で改行を読み捨ててからgetlineを呼んでください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- printf 標準入出力関数
- printfで数値を表示する方法
- coutによるコンソール出力
- cinによる入力(パラメータ渡し)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- UE5のEvent Tickノードの使い方|毎フレーム処理とDelta Seconds 2026-06-13 13:26:37
- UE5のレベルブループリントでキャラクターをスポーンさせる方法 2026-06-13 13:26:37
- UE5でAI Move ToがBlockedで失敗する原因と対処方法|NavMesh確認 2026-06-13 13:26:36
- UE5のビューポートの使い方|視点操作・ビューモード・投影の基本 2026-06-13 13:26:36
- Reactのよくあるエラーと対処まとめ|環境構築・npm関連 2026-06-13 13:26:36
- UE5のWorld Compositionとは|サブレベルによる大規模ワールドと非推奨化 2026-06-13 13:26:35
- C++のコンパイルと実行方法|g++の使い方とオプション 2026-06-13 13:26:35
- C++の開発環境構築|コンパイラとIDEの選び方・Hello World 2026-06-13 13:26:34
- .protoのgo_packageオプションとは|Goコード生成時のパッケージ指定 2026-06-13 13:26:34
- gRPCクイックスタート|.proto定義からサーバ・クライアント実装まで 2026-06-13 13:26:33
- C++の関数まとめ|標準入出力(printf・cout・cin)と関数の基本 2026-06-13 13:26:33
- C#・Visual Studioのよくあるエラーと対処まとめ 2026-06-13 13:26:33
- UE5のアウトライナーとは|アクターの一覧・整理・親子付け 2026-06-13 13:26:32
- UE5でSet Input Mode UI Onlyを解除する方法|Game Onlyに戻す 2026-06-13 13:26:32
- UE5エディタの自動保存の頻度を変更する方法|Auto Save設定 2026-06-13 13:26:31
コメントを削除してもよろしいでしょうか?