2017-05-15 16 views
-1

私が作ったコード:(「?決断を下す」出力無限回)C++でユーザーの入力に「y」または「n」だけを受け入れる方法はありますか?

while (*user is not closing the program*) 
{ 
    cout << "Make a decision? (y/n) " << endl; 
    cin >> userAnswer; 
    ... 
    if (UsersAnswer != 'y' || UsersAnswer != 'n') 
     cout << "You may only type y or n."; 
} 

しかし、私は「こんにちは」などの文章や単語を入れたときに、それはコードが壊れ

+0

'while'ループを使用します。 – wkl

+1

'userAnswer'はどこから来たのですか? –

+0

@wklそのコードはwhileループの中にあります –

答えて

4

あなたは知っていdo-while

do 
{ 
    std::cout << "Yes or no yadda yadda yadda" << std::endl; 
    std::cin >> userAnswer; 
} 
while(!std::cin.fail() && userAnswer!='y' && userAnswer!='n'); 
+0

好きですが、複数の文字を入力すると、入力が空になるまで「はい」または「いいえyadda yadda yadda」を続けて印刷します。 – Akira

3

しかし、私は「こんにちは」などの文章や単語を入れたときに、それがコード壊れる(出力は「決定を下す?」無限回)

あなたがhelloを入力したため、この問題が発生した理由は、あなたのコードはchar、charなどで読み込まれます。 cout << "You may only type y or n.";その後、あなたは残りの部分をignoreことができ、これを回避するためにcout << "Make a decision? (y/n) " << endl;

でループを再起動します。それは'y'または'n'だ場合、それがチェックし、それぞれの時間は、それはあなたのコードが行うように指示何を各charの'h''e''l'など'y'または'n'が入力されていない場合、入力の

その他の見所:

  • あなたはそれだあなたのコードから
  • yまたは n
  • 入力されたときに、あなたのループを終了することをあなたが同様に大文字YまたはNを確認する必要があることを確認する必要がありますuserAnswerUserAnswerとは何ですか? userAnswerがstringの場合は、おそらくgetlineを使用してください。
  • あなたは他の人があなたのuserAnswerがchar you could do it this wayであると仮定すると、いくつかの擬似コードに

を実行しないことを、最小限のコード例を提供する必要があります

#include <iostream> 
#include <limits> 

using namespace std; 

int main() 
{ 
    char userAnswer; 
    while (1 /*user is not closing the program*/) 
    { 
     cout << "Make a decision? (y/n) " << endl; 
     cin >> userAnswer; 
     cout << "entered: '" << userAnswer << "'\n"; 
     userAnswer = tolower(userAnswer); 
     if (userAnswer == 'y' || userAnswer == 'n') 
      break; 

     cout << "You may only type 'y' or 'n'.\n"; 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    } 
} 
関連する問題