0

数値の階乗を計算するための単純な C# コードを作成しましたが、プログラムが姓で動かなくなっています。なぜそれが行き詰まっているのか誰かができますか?

ありがとう、

おみん

using System;

//1. Write a program which finds the factorial of a number entered by the user.

namespace Beginner1{

class ProblemOne
{
    static void Main (string[] args)
    {
        bool play = true;
        while ( play ) {
            Console.Write ("Type in the number you would like to find Factorial of: ");
            int num = Convert.ToInt16( Console.ReadLine ());
            int sum = 1;
            for (int i = 2; i <= num; i++) {
                sum = sum * i;
            }
            Console.WriteLine ("The Factorial of {0} is {1}", num, sum);
            Console.Write ( "Would you like to play again? (Y or N): " );
            string ans = Console.ReadLine();
            do {
                if( ans == "Y" || ans == "y" )  {
                    play = true;
                    //break;
                }
                else if( ans == "N" || ans == "n" ) {
                    play = false;
                    //break;
                }
                else
                {
                    Console.Write( "You have entered an invalid answer. Please choose from either Y or N: ");
                    ans = Console.ReadLine();
                }
            } while ( (ans != "Y") || (ans != "y") || (ans != "N") || (ans != "n") );
        }
    }
}

} `

4

3 に答える 3

8

あなたのwhile状態を見てください:

while ( (ans != "Y") || (ans != "y") || (ans != "N") || (ans != "n") )

抜け出すためには、これらのサブ条件のすべてが false でなければなりません (全体の値が false になるように)。

最初の条件が真になる唯一の方法は、「Y」である場合です...つまり、「y」と等しくないことansは間違いありません...

つまり、ループは次のようになります。

while (!(ans == "Y" && ans == "y" && ans == "N" && ans == "n"))

4 つの値すべてと等しくなるには、かなり特殊な文字列でなければなりません。

あなたは実際に欲しい:

while (ans != "Y" && ans != "y" && ans != "N" || ans != "n")

つまり、値が目的の値のいずれとも等しくない間は続行します。(別の方法として、一連の「適切な回答」を保持することもできます...

于 2012-10-20T21:40:28.363 に答える
0

私はこのようなことをします:

bool isValid = false;

        do
        {

            if( ans == "Y" || ans == "y" )  {
                play = true;
                isValid = true;
                //break;
            }
            else if( ans == "N" || ans == "n" ) {
                play = false;
                isValid = true;
                //break;
            }
            else
            {
                Console.Write( "You have entered an invalid answer. Please choose from either Y or N: ");
                ans = Console.ReadLine();
                isValid = false;
            }
        }while(isValid == false);

関連フィドル: https://dotnetfiddle.net/bxHY27

于 2016-07-14T18:08:17.563 に答える
0
        do {
            string ans = Console.ReadLine();
            if( ans == "Y" || ans == "y" )  {
                play = true;
                //break;
            }
            else if( ans == "N" || ans == "n" ) {
                play = false;
                //break;
            }
            else
            {
                Console.Write( "You have entered an invalid answer. Please choose from either Y or N: ");
                //ans = Console.ReadLine();
            }
        } while ( (ans != "Y") && (ans != "y") && (ans != "N") && (ans != "n") );
于 2012-10-20T21:43:09.300 に答える