CINは、Ctrlキー+ ZまたはCtrl + Dの後に入力を取得することはできません

私は、デジタルカウントが、私は数字の束を入力し、[数値の入力が検索されるように完成されて入ります小さなプログラムを書いた
が、私はCtrl + Dキーを押して、数セットの入力が完了した後、プログラムがすぐに終了し、ではありませんでした滞在の代わりに第2の入力は、私は、インターネット検索をチェックし、多くの人がこの問題に遭遇した
ある方法最初に表示を解決することの入力を追加することが完了した後

cin.clear();

しかし、私は無駄に使用し、あなたはプラスを見ることができます

cin.sync();

バッファはおそらくこれが可能である、と私は(cin.rdstateを読み、未読メッセージのクリアされた後の役割は、アクティブ状態への変化に間違った状態になる前に同じ)は、効果の後に使用されていない、することができ私たちは、0に復元しますが、問題はまだ解決されていない参照情報を検索していき、だけでなく、次の二つを追加する方法を見つけることができます

cin.clear();
clearerr(stdin);

その後、問題が解決され、

後に発見後に上記の溶液は、コードwindosプラットフォームを解決することであることがわかった、と私はLinuxの下にあった、あなたは以下のメソッドを使用する必要があり
、次のような理由のために:
CIN方法はEOFを検出し、EOF状態を示すCINオブジェクトを設定しますマーク。このフラグを設定した後、CINが再び呼び出されることはありませんCIN入力は仕事... cin.clear()メソッドを進めるために、入力をEOFマークをクリアしていません読み込みます。しかし、いくつかのシステムでは、CRL + Z / CTRL +によってdは実際の入力および出力の終わりであり、cin.clear()入力と出力を回復することはできないであろう、ということを覚え。
そして、なぜWindows上であなたは、あなたが私のMac上で行うことができないことができ、同じコードを追加しますか?

入力バッファは、ラインバッファです。キーボードと入力し、Enterキーを押しから文字列を入力した後、これらの文字は、第一の入力にバッファに格納されています。Enterキーを押すたびに、cin.get()入力データバッファが読まれたかどうかを検出します。ブロッキングおよび非ブロッキング:cin.getは()もチェックは、フローマークがCtrlキーZまたはCtrl + D +キーは2つの方法で、そのチェックを押されたキーボードの端があるか否かが判断されるであろう。

チェックモードをブロックすると、EnterキーがCtrlキー+ Zキーの組み合わせが押されたチェックパターンがすぐにCtrlキーを押しながら+ D応答の後に非ブロックモードを指している場合には魚が持っていた後にのみ押されを指します。Ctrlキー+ D文字を押す前に、キーボードから入力された場合は、Ctrlキー+はもはや再生ストリームの終端、その場合はCtrl + Dで、アクションがD、これらの文字が読めるのは、すなわち、入力バッファに相当してください役割。Ctrlキー+ Dを押す前にはキーボード入力がない場合、その後のCtrl + D現在の信号の終わりです。

Windowsシステムでは、一般的にはCtrl + Z、UNIX / Linuxシステムでは、一般的に、非ブロッキングチェックはCtrl + Dを使用して検査を遮断使用します ブロッキングは、特性を有している:のみEnterキーを押した後には、Ctrlキー+ Zを押す前に、そこか否かを検出することが可能となります 別の特徴:入力バッファが可読のCtrl + Zデータを検出しなかった場合(データが読み出されるように、ストリームの終わりに考えることはできません)。ニーズが知っていることをもう一つのポイント:Ctrlキー+ではない、それは他の文字と、入力バッファに格納できるよう、キーボードから入力されませんので、それは、生成する文字ではありません生成通常のASCII値Z、。

そして、どのような役割それはのclearerrです:
公式ドキュメントを参照してください:アドレス
だけで、それは流れのパラメータをリセットする必要があるストリームの状態をリセットすることができると言うに。cin.clear()、あなたはストリームをリセットできることを保証するものではありません
クリア公式文書:住所

123元記事公開 ウォンの賞賛610 ビューに35万+を

おすすめ

転載: blog.csdn.net/a568713197/article/details/104323488