ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?