ベストアンサー
ここでは、Cinでさらにクリアします
、 cin.get 、 cin.getline 、および cin。無視
>>演算子の使用(cinを使用)
>演算子は、ユーザーが入力した次の空白以外の文字を文字または文字配列に単に読み取りたい場合に使用できます。最初のスペースに続く印刷可能な文字は無視され、変数に格納されません。次のようなステートメントを使用します。
cin >> UserExplanation;
たとえば、必要に応じてスペースを含む全文をユーザーから取得します。その場合は、cinメンバー関数 get または getline を使用する方が適切です。 。
質問:ヌルターミネータは文字配列の最後に自動的に格納されますか、UserExplanation?
cin.getの使用
フォーマットされていないgetメンバー関数は、2つの例外を除いて>>演算子のように機能します。まず、取得関数には空白文字が含まれますが、ios :: skipwsフラグが設定されている場合(デフォルト)、エクストラクターは空白を除外します。次に、get関数を使用すると、タイの出力ストリーム(coutなど)がフラッシュされる可能性が低くなります。
get関数のバリエーションでは、バッファアドレスと読み取る最大文字数を指定します。これは、次の例に示すように、特定の変数に送信される文字数を制限するのに役立ちます。
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
この例では、最大24文字と終了文字を入力できます。残りの文字は後で抽出できます。
cin.getlineの使用
getlineメンバー関数は関数を取得します。どちらの関数も、入力の終了文字を指定する3番目の引数を許可します。デフォルト値は改行文字です。 どちらの関数も、必要な終了文字用に1文字を予約します。 ただし、getは終了文字をストリームに残し、getlineは終了文字を削除します。
次の例では、入力の終了文字を指定します。ストリーム:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
cin.ignoreの使用
cin.ignore(int nCount = 1、int delim = EOF);
パラメータ
nCount-抽出する文字の最大数。 delim-区切り文字(デフォルトはEOF)。
備考
最大nCount文字を抽出して破棄します。区切り文字delimが抽出されるか、ファイルの終わりに達すると、抽出は停止します。 delim = EOF(デフォルト)の場合、ファイルの終わりの状態のみが終了します。区切り文字が抽出されます。
回答
cin.ignore()は、入力バッファから1つ以上の文字を無視/クリアする定義済みの関数です。
前提条件: 1. cin は、空白、つまり" "、" \ t "、" \ n 「区切り文字として。
2。標準の入力デバイス(ここではキーボード)から何かを読み取ると、最初に入力バッファーに入ります。入力バッファーは、その前にすべての入力情報を保持する場所です。処理のためにCPUに進みます。
問題: 1。ユーザーから「文字列」を読み取りたいとします。 char myname [10];
2。どういうわけか、cin.getline() cin >> myname;
3の代わりにcinを使用することになります。 「ABC」と入力し、Enterキーを押します。 ABCを使用し、次の "\ n" を区切り文字として扱います。その結果、「\ n」は読み取られず、入力バッファに残ります。
4。 したがって、ここでは、cin.ignore()は、入力バッファーに残っているこれらの未読文字を無視します。
解決策:必要に応じて 状況を回避し、文字列の入力にcinを使用しないように注意してください。とtada、問題は解決しました!!