【问题标题】:Error-handling when user inputs character instead of double [closed]用户输入字符而不是双精度时的错误处理[关闭]
【发布时间】:2015-06-19 09:04:27
【问题描述】:

我做了一个简单的应用程序,它根据本金年数和利率计算贷款的每月还款额。如果用户输入一个字符而不是双精度,程序就会崩溃。当有人插入一个字母时,如何创建一条“请输入有效数字”的消息?

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

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

            bool Continue; 
            while (true) 
            {
                //initialize variables

                double r, yrs, m, p;
                string input, output;

                //principle amount
                Console.Write("Enter a Principle Amount: ");
                input = Console.ReadLine();
                //Int32.Parse
                p = double.Parse(input);

                //Number of years 
                Console.Write("Enter Number of Years: ");
                input = Console.ReadLine();
                //Int32.Parse
                yrs = double.Parse(input);

                //Interest Rate
                Console.Write("Enter Interest rate: ");
                input = Console.ReadLine();
                //Int32.Parse
                r = double.Parse(input);

                //monthly payment  formula:
                m = (p * r / 1200.0) / (1 - Math.Pow((1.0 + r / 1200.0),(-12 * yrs)));

                //Round two decimal pts 
                m = Math.Round(m,2);

                //output
                output = m.ToString();
                Console.WriteLine("Monthly payment is " + m + ".");
                Console.ReadLine();

                Console.WriteLine("Do you want to Continue y/n?");
                if (Console.ReadLine() == "y")
                {
                    Continue = true;
                }
                else
                {
                    Environment.Exit(0);
                }

            } 

        }
    }
}

【问题讨论】:

  • 阅读有关 Double.TryParse 的信息。另外:校长*

标签: c# .net error-handling double


【解决方案1】:

使用 TryParse 而不是 int.parse 这样的东西

           Console.Write("Enter a Principle Amount: ");
           input = Console.ReadLine();
           double.TryParse(input,out p);
           if(p== 0)
           {
             Console.Write("please input valid number");
           }

【讨论】:

  • 这似乎是最简单的方法,谢谢!
【解决方案2】:

我通常为它编写一个单独的方法,使用double.TryParse,因为如果转换成功,它会返回true并将转换后的值分配给out参数。在下面的示例中,如果TryParse 成功,我将跳出while (true) 循环并返回结果。否则,我告诉用户再试一次:

private static double GetDoubleFromUser(string prompt)
{
    double result;

    while (true)
    {
        if (prompt != null) Console.Write(prompt);
        var input = Console.ReadLine();
        if (double.TryParse(input, out result)) break;
        Console.WriteLine("Sorry, that is not a valid number. Please try again...");
    }

    return result;
}

然后,在您的主代码中,您不必担心输入和输出或验证,您可以执行以下操作:

double principal = GetDoubleFromUser("Enter a Principal Amount: ");
double years = GetDoubleFromUser("Enter Number of Years: ");
double rate = GetDoubleFromUser("Enter Interest rate: ");

【讨论】:

猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2022-01-11
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多