繁体   English   中英

如何设置无输入的异常处理

[英]How do I set up exception handling for no input

这是我的程序,用于输入2个数字,然后由一个运算符进行数学运算并吐出答案(这要感谢先前的异步帮助)。 到目前为止,除了我什么都不输入的时候,其他所有东西都运行良好。 我试图让它说没有输入,然后再试一次,但是它崩溃了。 有人知道为什么吗? 提前致谢。

using System;
class Calculation
{
    public static void Main(string[] data)
    {

        if (data.Length == 0)
        {
            Console.WriteLine("No input... Try again");

            return;
        }

        double result;

        if (!Double.TryParse(data[0], out result))
        {
            Console.WriteLine("Invalid input: " + data[0]);

            return;
        }

        Console.WriteLine("Starting with number: " + result);

        char op;
        double number;

        string errorMessage;

        do
        {
            if (!TryGetData(out op, out number, out errorMessage))
            {
                Console.WriteLine("Invalid input: " + errorMessage);

                continue;
            }

            switch (op)
            {
                case '+':
                    result += number;
                    break;
                case '-':
                    result -= number;
                    break;
                case '*':
                    result *= number;
                    break;
                case '/':
                    result /= number;
                    break;
                default:
                    Console.WriteLine("Done");
                    continue;
            }

            Console.WriteLine("Result = " + result.ToString());


        } while (Char.ToLower(op) != 'q');
    }

    static bool TryGetData(out char anOperator, out double aNumber, out string message)
    {
        aNumber = 0;
        message = null;

        Console.Write("Enter an operator and a number or 'q' to quit: ");

        var line = Console.ReadLine();

        anOperator = line[0];

        if (anOperator != 'q' && anOperator != 'Q')
        {
            if (line.Length <= 2)
            {
                message = "Enter an operator followed by a space and then a number.";

                return false;
            }

            var isValidNumber = Double.TryParse(line.Substring(2), out aNumber);

            if (!isValidNumber)
            {
                message = "Invalid input: " + line.Substring(2);

                return false;
            }

            if (isValidNumber && (anOperator == '/' && aNumber == 0))
            {
                message = "Cannot divide by 0.";

                return false;
            }

            if (line[1] != ' ')
            {
                message = "Make sure to put a space between operator and number.";

                return false;
            }

        }

        return true;
    }
}

您要告诉它检查是否为null的变量的length属性。 如果要删除,则可以检查是否为空,然后检查其长度。

C#本质上是一种短路语言,如果if语句的第一部分为false(或true),则其他部分将不进行评估。

if (data == null || data.length == 0) 
{
    Console.WriteLine("No input... Try again");
    return;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM