如果输出未定义,请重复一个函数

时间:2016-05-31 03:07:28

标签: c# loops while-loop int calculator

好的,所以我是C#的新手,我只是想用控制台创建一个简单的计算器。我的问题是如何让用户在选择除零时为num1和num2选择不同的值,或者除以零以防止程序因未定义的结果而崩溃。我想我可以使用while循环检查并查看是否将结果作为int,如果不重复整个程序。我如何检查答案以验证结果是否为int?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
         public static void Main(string[] args)
    {

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

        while ()
        {

            Console.WriteLine("Please enter the first number.");
        num1 = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Please enter which operator you would like to use(+,-,*,/)");
        operand = Console.ReadLine();

        Console.WriteLine("Please enter the second number.");
        num2 = Convert.ToInt32(Console.ReadLine());

            switch (operand)
            {
                case "+":
                    answer = num1 + num2;
                    Console.WriteLine(num1 + " + " + num2 + " = " + answer);
                    Console.ReadKey();
                    break;
                case "-":
                    answer = num1 - num2;
                    Console.WriteLine(num1 + " - " + num2 + " = " + answer);
                    Console.ReadKey();
                    break;
                case "*":
                    answer = num1 * num2;
                    Console.WriteLine(num1 + " * " + num2 + " = " + answer);
                    Console.ReadKey();
                    break;
                case "/":
                    if (num2 == 0)
                    {

                        Console.WriteLine("You cannot devide by zero, please select a different number.");
                        num2 = Convert.ToInt32(Console.ReadLine());
                    }
                    else if (num1 == 0)
                    {
                        Console.WriteLine("You cannot devide zero, please select a different number.");
                        num1 = Convert.ToInt32(Console.ReadLine());
                    }
                    else
                    {
                        answer = num1 / num2;
                        Console.WriteLine(num1 + " / " + num2 + " = " + answer);
                        Console.ReadKey();

                    }
                    break;
                }

            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

你真的只需要检查第二个值(num2)。您希望在阅读后立即进行评估。你如何处理它取决于你。你可以无限期地循环一段时间,但你也想要验证(与任何这些输入一样),如果他们无法理解输入的方向,则给用户一个退出选项。

答案 1 :(得分:0)

可能的解决方案是使用while,见下文:

            case "/":
                while (num2 == 0)
                {

                    Console.WriteLine("You cannot devide by zero, please select a different number.");
                    num2 = Convert.ToInt32(Console.ReadLine());
                }

                answer = num1 / num2;
                Console.WriteLine(num1 + " / " + num2 + " = " + answer);
                Console.ReadKey();

                break;

但是,您应该考虑使用int.TryParse方法(https://msdn.microsoft.com/en-us/library/system.int32.tryparse%28v=vs.110%29.aspx)进行更改,就好像用户键入的内容不是数字一样,Convert.ToInt32将抛出{{1} }(https://msdn.microsoft.com/en-us/library/sf1aw27b%28v=vs.110%29.aspx)。

答案 2 :(得分:0)

我认为cleanset sollution是提取一些方法(选择代码并右键单击鼠标 - >重构 - > extractMethod)。 其中一个功能应该是" getSecondNumber" 在该功能中,您可以使用"输入第二个数字或点击" q"退出。

如果Int.TryParse结果为false,或者数字== 0再次调用您的函数(并且您将进入&#34的起始位置;输入第二个数字......&#34)结束; 祝你好运