2017-03-23 11 views
0

私は唯一の2つのオプションとしてY/Nを使用して、ユーザーに操作の確認を求めるプロンプトを表示しようとしています。入力された各文字に対して繰り返し入力を停止できますか?

ユーザがYを入力した場合は、ユーザがNを入力すると何か他のことを行うと何かが実行されます。しかし、ユーザがYまたはN以外のものを入力した場合、単にYまたはNが押されるまで質問を繰り返す。

これは私がこれまで持っているものです:

char result = '\0'; 

while (result != 'y' || result != 'n') 
{ 
    char key = '\0'; 
    cout << "Do you wish to continue & overwrite the file? Y/N: "; 
    cin >> key; 
    result = tolower(key); 
} 

if (result == 'y') 
{ 
    cout << "YES!" << endl; 
} 
else if (result == 'n') 
{ 
    cout << "NO!" << endl; 
} 

をそして、私の問題は、私は複数の無効な文字を入力すると、それはそうのように、それぞれの無効な文字のために再度プロンプトが表示されていることである:

Do you wish to continue & overwrite the file? Y/N: abc 
a 
Do you wish to continue & overwrite the file? Y/N: b 
Do you wish to continue & overwrite the file? Y/N: c 
Do you wish to continue & overwrite the file? Y/N: 

私は間違っていますか?

+0

この問題には関係ありませんが、どのような場合に期待していますか?(結果!= 'y' ||結果!= 'n ') '終了する?式の '' false''(つまり、ループを抜け出す)の値の唯一可能な組み合わせは、 'result'が' 'y''に等しく、' 'n'' * *同時に**。これは不可能です。 –

+0

はい、私のII状態も間違っていたことを認識しました。下の私の答えを見てください。 –

答えて

0

入力が文字列(charではなく)として格納されている場合、入力された各文字の繰り返しは得られません。また、私のwhileループ条件は、ORの代わりにANDであったはずです:

string result = ""; 

while (result != "y" && result != "n") 
{ 
    cout << "Do you wish to continue & overwrite the file? Y/N: "; 
    cin >> result; 
    transform(result.begin(), result.end(), result.begin(), ::tolower); 
} 

if (result == "y") 
{ 
    cout << "YES!" << endl; 
} 
else if (result == "n") 
{ 
    cout << "NO!" << endl; 
} 
+0

文字列のデフォルトの初期設定は、空の文字列 'string result =" ";'になります。文字列のような文字列を扱わないようにしてください。あなたのコードはまだうまく動作します。 – Aziuth

関連する問題