0

遊んでいる小さなプログラムがあります。数値かどうかを確認する必要があります。そうでない場合は、各入力の数値になるまでループし、メイン メソッドと電卓メソッドを作成する必要がありますか?

コードはこちら /////////////////////////////////////////// //////

        int num1;
        int num2;
        string operand;
        float answer;
        string text1;




        ////enter first number ////
        Console.Write("Please enter a number: ");
        text1 = Console.ReadLine();

        // if number not integer then fail ////
        bool res = int.TryParse(text1, out num1);
        if (!res)
        {
            Console.WriteLine(" FAIL");
            ////enter first number ////
            Console.Write("Please enter a number: ");
            text1 = Console.ReadLine();
        }
        else
        {

        }



        //// enter operand ////
        Console.Write("Please enter an operand (+, -, /, *): ");
        operand = Console.ReadLine();



        // enter second number //
        Console.Write("Please enter the second number: ");
        text1 = Console.ReadLine();

        // if number not integer then fail //
        bool eff = int.TryParse(text1, out num2);
        if (!eff)
            do
            {
                Console.WriteLine(" FAIL");
                // enter second number //
                Console.Write("Please enter the second number: ");
                text1 = Console.ReadLine();
            }
            while (eff == true);
        {

        }
        // converts number to integer ///


        // makes operand answers from each number ////
        switch (operand)
        {
            case "-":
                answer = num1 - num2;
                break;
            case "+":
                answer = num1 + num2;
                break;
            case "/":
                answer = num1 / num2;
                break;
            case "*":
                answer = num1 * num2;
                break;
            default:
                answer = 0;
                break;
        }

        /// converts numbers to string using operand and writes final line ///
        Console.WriteLine(num1.ToString() + " " + operand + " " + num2.ToString() + " =                   
        "+ answer.ToString());
        Console.ReadLine();
        }

        }


        }

        }

        /// converts numbers to string using operand and writes final line ///
        Console.WriteLine(num1.ToString() + " " + operand + " " + num2.ToString() + " = 
        " + answer.ToString());
        Console.ReadLine();
4

2 に答える 2

0

必要なものがこれだけで、コンソール アプリを使用している場合は、次を使用できます。

        int num1;
        int num2;
        string operand = string.Empty;
        float answer;
        string text1;

        ////enter first number ////
        Console.Write("Please enter a number: ");
        text1 = Console.ReadLine();

        // if number not integer then fail ////
        bool res = int.TryParse(text1, out num1);
        while (!res)
        {
            Console.WriteLine(" FAIL");
            ////enter first number ////
            Console.Write("Please enter a number: ");
            text1 = Console.ReadLine();
            res = int.TryParse(text1, out num1);
        }

        //// enter operand ////
        while (operand == string.Empty || operand.Length > 1 || !(new char[] { '+', '-', '*', '/' }).Contains(char.Parse(operand)))
        {
            Console.Write("Please enter an operand (+, -, /, *): ");
            operand = Console.ReadLine();
        }


        // enter second number //
        Console.Write("Please enter the second number: ");
        text1 = Console.ReadLine();

        // if number not integer then fail //
        bool eff = int.TryParse(text1, out num2);
        while (!eff)
        {
            Console.WriteLine(" FAIL");
            // enter second number //
            Console.Write("Please enter the second number: ");
            text1 = Console.ReadLine();
            eff = int.TryParse(text1, out num2);

        }
        // converts number to integer ///


        // makes operand answers from each number ////
        switch (operand)
        {
            case "-":
                answer = num1 - num2;
                break;
            case "+":
                answer = num1 + num2;
                break;
            case "/":
                if (num2 == 0)
                {
                    Console.WriteLine("Divide By Zero Error");
                    return;
                }
                answer = num1 / num2;
                break;
            case "*":
                answer = num1 * num2;
                break;
            default:
                answer = 0;
                break;
        }

        /// converts numbers to string using operand and writes final line ///
        Console.WriteLine(num1.ToString() + " " + operand + " " + num2.ToString() + " =  "+ answer.ToString());
        Console.ReadLine();

なぜそんなに単純なもののために別のメソッドを作成する必要があるのですか? そして、これは単純すぎて尋ねることができないと思ったので、これが必要かどうかを尋ねるだけですか? もう少し苦労して、これを自分で書くこともできたでしょう。これには些細なことは何もありません。私は、あなたがプログラミングの初心者であることを前提としています。

于 2012-07-11T11:10:41.787 に答える
0

問題は「eff」と「res」の扱いにあるようです。ユーザーが最初に尋ねられたときに整数以外の値をキー入力した場合、num1 と num2 には値が設定されていないため、2 回目に何を答えてもかまいません。それを修正すると、コードが機能するように見えます。

値を入力しても同じことをしているように見えますが、プロンプトがわずかに異なるため、これを次のような別の関数に移動する必要があります。

    static int GetNumberFromUser(string order)
    {
        string userText = String.Empty;
        int result;

        Console.Write("Please enter {0} number: ", order);
        userText = Console.ReadLine();

        while (!int.TryParse(userText, out result))
        {
            Console.WriteLine("FAILED");
            Console.Write("Please enter {0} number: ", order);
            userText = Console.ReadLine();
        }
        return result;
    }

次に、次のように呼び出します。

    num1 = GetNumberFromUser("first");
    num2 = GetNumberFromUser("second");

この関数は数値への変換を処理し、ユーザーが有効な値を入力するまで質問を続けます。

「電卓」メソッドは、別のメソッドにあるスイッチをコピーして貼り付けるだけです。

    static float Calculator(int num1, string operand, int num2)
    {
        switch (operand)
        {
            case "-":
                return num1 - num2;
            case "+":
                return num1 + num2;
            case "/":
                return num1 / num2;
            case "*":
                return num1 * num2;
            default:
                return 0;
        }
    }

を使用して呼び出されます

        answer = Calculator(num1, operand, num2);

私がそれをしている間、結果の行は読みにくいです、私はこのようなものに行きます

    Console.WriteLine("{0} {1} {2} = {3}", num1, operand, num2, answer);
于 2012-07-11T11:11:08.490 に答える