【C++】cin.clear()、cin.sync()およびcin.ignor()の使い方

1774 ワード

一、cin.clear()、cin.sync()
    cin.clear()はcinのステータスラベルを変更するために使用されます.
   cin.sync()は、キャッシュ領域のデータ・ストリームを消去するために使用されます.マーカーが変更されていない場合は、データ・ストリームを消去しても入力できません.したがって、2つを組み合わせて使用します.たとえば、次のようにします.
#include
using namespace std;
int main()
{
 int a;
 cout<>a;  //int      char   ,failbit 1
 cout<>a;                         //        
 cout<>aはまたその  をaに れて、ストリーム  ストリームはまた  に  しません
cin>>a;
cout<>a;
cout<

二、cin.ignore(a,ch)
入力ストリーム(cin)から文字を抽出し、抽出された文字は無視され、使用されません.文字を破棄するたびに、文字をカウントし、比較します.カウント値がaに達した場合、または破棄された文字がchである場合、cin.ignore()関数は終了します.そうでなければ、待ち続けます.
その一般的な機能の一つは、車に戻るための入力バッファの内容をクリアし、前回の入力が次の入力に与える影響を除去することです.
たとえば、次のように使用できます.
cin.ignore(1024,')は、通常、1つ目のパラメータを十分に大きく設定し、実際には2つ目のパラメータのみが機能するため、この文は、リターン(リターンを含む)前の文字を入力バッファ(ストリーム)から消去することである.
三、cin.sync()とcin.ignor()の比較
sync()の役割は、入力バッファをクリアすることです.成功時には0を返し、失敗時にはbadbitがセットされ、関数は-1を返します.また、出力をバインドした入力ストリームに対してsync()を呼び出し、出力バッファもリフレッシュします.
 
しかし,プログラムの実行時に外部入力の進捗が必ずしも分からないため,入力バッファの内容をすべてクリアするか否かを制御することは困難である.通常、入力バッファの一部をすべてではなく放棄したいだけです.たとえば、現在の行をクリアしたり、行末の改行をクリアしたりします.しかし、バッファに次の行の内容がすでにある場合は、この部分は私たちが残したいものかもしれません.この時はsync()は使わないほうがいいです.ignore関数で代用することも考えられる.cin.ignore(numeric_limits<:streamsize>::max(),'/n');//現在の行cinをクリアします.ignore(numeric_limits<:streamsize>::max());//cinのすべてをクリア
長い名前に驚かないでnumericlimits<:streamsize>::max()はclimitsヘッダファイルで定義されたストリームで使用される最大値にすぎず、十分な整数で置き換えることもできます.
ignoreを使用するとsync()よりもバッファを正確に制御できることは明らかです.(1)
form:http://blog.sina.com.cn/s/blog_8d3652760100wl9r.html