[解決済み] cin.ignore()は具体的に何をするのですか?
2022-02-01 18:27:06
質問
教授に言われたのですが、毎回
cin
のように、必ずその後に
cin.ignore(100, '\n')
. でも、なぜなんだろう?
ここで一例をご紹介します。
const int MAX = 200;
char input[MAX];
cout << "Enter something: ";
cin.get(input, MAX);
cin.ignore(100, '\n'); //why necessary?!!
解決方法は?
を使用する必要はありません。
ignore
あらゆる
のような、ある特定の時間だけしか読まないような場合、あるいはフォーマットされた入力の後に使用するとよいでしょう。
あなたの例では、もし私が200文字以上入力したら、今後の入力は手荒いものになるかもしれませんね。
char input[200];
std::cin.get(input, 200);
この実行後、最初の200文字が抽出されましたが、それ以降の文字はストリームに眠ったままになっています。また、改行(
'\n'
) 文字が含まれています。これ以降に入力を取り出そうとすると、いつでも前回の入力から残りの文字を読み込むことになります。
これは、フォーマットされた入力でも起こります。この例を見てみましょう。
int age;
std::string name;
std::cin >> age;
std::getline(std::cin, name);
あなたが欲しいのは、年齢を入力することです、例えば
32
というような名前と、quot;Bob" というような名前を指定します。年齢を入力すると、プログラムは名前を読むのをスキップします。このとき
std::cin
は
>>
を変数に読み込むために
'\n'
という文字は、エンターキーを押してストリームに入れられたものです。すると
getline
はその改行文字を読み込んで停止します。なぜなら、改行文字に当たったので、それが終わったと思ったからです。
ignore
はこの問題を解決するために、次の改行文字を含むまでのすべてを破棄し、余分な入力が将来の読み込みを混乱させないようにします。
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] ムーブセマンティクスとは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された