2

これらの if ステートメントを意図したとおりに動作させることができないようです。「文字列回答」に入力したものは何でも、常に最初のIFステートメントにジャンプします。ここでは、回答が正確に「n」または「N」である場合、または回答が正確に「y」であるブロックのみを実行するように条件が設定されています。 「よ」。それ以外を入力すると、0 が返されます。

    // Game Recap function, adds/subtracts player total, checks for deposit total and ask for another round
    int gameRecap() {
    string answer;
    answer.clear();

    cout << endl << "---------------" << endl;
    cout << "The winner of this Game is: " << winner << endl;
    cout << "Player 1 now has a total deposit of: " << deposit << " credits remaining!" << endl;
    cout << "-------------------------" << endl;

    if (deposit < 100) {
       cout << "You have no remaining credits to play with" << endl << "Program will now end" << endl;
       return 0;       
    }
    else if (deposit >= 100) {
       cout << "Would you like to play another game? Y/N" << endl;
       cin >> answer;
       if (answer == ("n") || ("N")) {
          cout << "You chose no" << endl;
          return 0;
       }
       else if (answer == ("y") || ("Y")) {
          cout << "You chose YES" << endl;
          currentGame();
       }
       else {
            return 0;
       }
       return 0;
    }
    else {
         return 0;
    }
return 0;
}
4

3 に答える 3

9

これは正しくありません:

if (answer == ("n") || ("N"))

そのはず

if (answer == "n" || answer == "N")

ただし、現在のコードがコンパイルされる理由を見つけることは有益です。C++ および C では!= 0、ブール式を表さない条件に暗黙が追加されます。したがって、式の 2 番目の部分は次のようになります。

"N" != 0

これは常にtrue:"N"文字列リテラルであり、 になることはありませんNULL

于 2013-11-11T19:19:21.937 に答える
5

オペレーターは、||あなたが思っているようには機能しません。

if (answer == ("n") || ("N"))

is かどうかをチェックし、そうでない場合answerはブール値として"n"評価"N"します。この場合は常に true です。あなたが本当にやりたいことは、

if (answer == ("n") || answer == ("N"))

"y"およびに対するチェックについても、同様の調整を行う必要があり"Y"ます。

于 2013-11-11T19:20:12.900 に答える
2

この部分は正しく評価されていません:

if (answer == ("n") || ("N")) {}

する必要があります:

if (answer == "n" || answer == "N") {}
于 2013-11-11T19:19:58.400 に答える