0
while(cout << "Enter a positive integer: " &&
(!(cin >> anInteger) || anInteger < 0))
{
cout << "Enter a positive integer.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
while(cout << "Read or write (r/w): " &&
(!(cin >> rw) || (rw != 'r' && rw != 'w')))
{
cout << "Enter r or w.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
ここでは、整数を求め、次に「r」または「w」を求めます。しかし、最初のwhile文に '4r'のようなものを入力すると、 'r'はバッファに残り、次のwhile文に適用されます。これをどうすれば解決できますか?シンバッファーは無視されませんか?
文字を切り捨てるのではなく最初のwhileループにすべての整数がある場合、入力を受け入れる最も簡単な方法は何ですか?
すべてのデータを 'std :: string'として読み込み、それを解析して正しい入力があるかどうかを判断することをお勧めします。 – NathanOliver
'4r'と入力すると、' cin >> anInteger'は失敗しません。整数 '4'を読み込み、' r'文字に 'cin'を置きます。ループの後にも 'cin.ignore()'を呼び出すべきです。 – Barmar