System.FormatException 当 while 循环添加到控制台计算器时收到

System.FormatException received when while loop added to console calculator

我正在用 C# 制作一个控制台计算器,它要求用户输入 2 个数字和一个字符。

代码如下:

using System;

namespace Calculator
{
    public static class Calculator
    {
        public static void welcome()
        {
            Console.WriteLine("Welcome to Calculator!");
            Console.WriteLine();
        }

        public static void printResult(int result)
        {
            Console.WriteLine($"Answer: {result}");
        }

        public static void calculate(int num1r, char operr, int num2r)
        {
            int result_b = 0;
            switch(operr)
            {
                case '+':
                    result_b = num1r + num2r;
                    break;
                case '-':
                    result_b = num1r - num2r;
                    break;
                case '*':
                    result_b = num1r * num2r;
                    break;
                case '/':
                    result_b = num1r / num2r;
                    break;
            }
            printResult(result_b);

        }

        public static void askUser()
        {
            Console.WriteLine("Enter a number: ");
            string str1 = Console.ReadLine();
            int num1 = (int)Convert.ToInt32(str1);

            Console.WriteLine("Enter another number: ");
            string str2 = Console.ReadLine();
            int num2 = (int)Convert.ToInt32(str2);

            Console.WriteLine("Enter an operator: ");
            char oper = (char)Console.Read();

            Console.WriteLine();

            calculate(num1, oper, num2);
        }

        public static void Main(string[] args)
        {
            welcome();
            askUser();
        }
    }
}

当我 运行 这段代码时,控制台看起来像这样:

Welcome to Calculator!

Enter a number:
23424
Enter another number:
5232
Enter an operator:
+

Answer: 28656

我想添加一个 while 循环,以便它可以多次询问用户输入,如果用户需要的话。所以我在这个程序中添加了一些代码:

using System;

namespace Calculator
{
    public static class Calculator
    {
        public static void welcome()
        {
            Console.WriteLine("Welcome to Calculator!");
            Console.WriteLine();
        }

        public static void printResult(int result)
        {
            Console.WriteLine($"Answer: {result}");
        }

        public static void calculate(int num1r, char operr, int num2r)
        {
            int result_b = 0;
            switch (operr)
            {
                case '+':
                    result_b = num1r + num2r;
                    break;
                case '-':
                    result_b = num1r - num2r;
                    break;
                case '*':
                    result_b = num1r * num2r;
                    break;
                case '/':
                    result_b = num1r / num2r;
                    break;
            }
            printResult(result_b);

        }

        public static void askUser()
        {
            Console.WriteLine("Enter a number: ");
            string str1 = Console.ReadLine();
            int num1 = (int)Convert.ToInt32(str1);

            Console.WriteLine("Enter another number: ");
            string str2 = Console.ReadLine();
            int num2 = (int)Convert.ToInt32(str2);

            Console.WriteLine("Enter an operator: ");
            char oper = (char)Console.Read();

            Console.WriteLine();

            calculate(num1, oper, num2);
        }

        public static void Main(string[] args)
        {
            bool bool1 = true;
            while (bool1 == true)
            {
                welcome();
                askUser();
                Console.WriteLine("Do you want to continue?(y/n only) ");
                switch(Console.Read())
                {
                    case 'y':
                        Console.WriteLine("Ok!");
                    break;
                    case 'n':
                        Console.WriteLine("Thank you for using Calculator!");
                        bool1 = false;
                    break;
                }
            }

        }
    }
}

但现在我得到一个例外:

System.FormatException: 'Input string was not in a correct format.'

它指向行int num1 = (int)Convert.ToInt32(str1);

有关更多信息,我正在使用 Visual Studio。

您需要像这样进行一些更改:

using System;

namespace Calculator
{
public static class Calculator
        {
            public static void welcome()
            {
                Console.WriteLine("Welcome to Calculator!");
                Console.WriteLine();
            }

            public static void printResult(int result)
            {
                Console.WriteLine($"Answer: {result}");
            }

            public static void calculate(int num1r, char operr, int num2r)
            {
                int result_b = 0;
                switch (operr)
                {
                    case '+':
                        result_b = num1r + num2r;
                        break;
                    case '-':
                        result_b = num1r - num2r;
                        break;
                    case '*':
                        result_b = num1r * num2r;
                        break;
                    case '/':
                        result_b = num1r / num2r;
                        break;
                }
                printResult(result_b);

            }

            public static void askUser()
            {
                Console.WriteLine("Enter a number: ");
                string str1 = Console.ReadLine();
                int num1 = (int)Convert.ToInt32(str1);

                Console.WriteLine("Enter another number: ");
                string str2 = Console.ReadLine();
                int num2 = (int)Convert.ToInt32(str2);

                Console.WriteLine("Enter an operator: ");
                char oper = Console.ReadLine()[0];

                Console.WriteLine();

                calculate(num1, oper, num2);
            }

            public static void Main(string[] args)
            {
                bool bool1 = true;
                while (bool1 == true)
                {
                    welcome();
                    askUser();
                    Console.WriteLine("Do you want to continue?(y/n only) ");
                    var continueSt = Console.ReadLine();
                    switch (continueSt)
                    {
                        case "y":
                        case "Y":
                            break;
                        default:
                            Console.WriteLine("Thank you for using Calculator!");
                            bool1 = false;
                            break;
                    }
                }
                Console.WriteLine("Bye!");
                Console.ReadKey();

            }
        }
    }
}