循环条件

时间:2015-03-22 21:23:28

标签: c# winforms loops conditional-statements

我还在学习C#,我对循环条件有一个快速的问题。我将尽可能清楚地解释我的问题,所以如果我混淆任何人,我会提前道歉。所以,假设我有一个从用户输入的双重形式的数字(我选择了一个双,因为我主要使用它们,但这不是全部包含,这意味着它可以是小数,也可以是整数)。现在在我的循环中我希望设置条件以确保数字不是字符(I.E.用户输入字母而不是数字。),这样当发生这种情况时,将出现一个消息框,表示只输入数字。我只问这个,因为我不知道如何编写这个,每次运行程序时整个程序都会停止,因为输入的格式不正确。我怎么能编码我的循环来验证输入实际上是数字而不是字母?我想有一个消息框弹出窗口,上面写着“仅输入数字”。除了编写这部分外,我知道如何做其他一切。我试过上帝知道在互联网上以这些形式提出这个问题多少次,但我没有得到一个明确的答案。 对于那些需要查看某种代码以便更好地理解的人,如下所示(仅供参考我使用的是Windows窗体):

        double amnt = Convert.ToDouble(txtAMNT.Text);
        string Amount=txtAMNT.Text;
        double rate = Convert.ToDouble(txtRATE.Text);
        string Rate = txtRATE.Text;
        double time = Convert.ToDouble(txtTIME.Text);
        string Time=txtTIME.Text;
        double monthpay;
        double totalinterest;
        double realrate = (rate / 12)/100;

        if ((Amount == "")||(Rate == "")||(Time==""))
        {
            MessageBox.Show("Please fill all boxes with numbers");
        }
        else if (!(Rate == "."))
        {
            MessageBox.Show("Please enter the rate with a decimal sign ' . ' .");
        }
        else if (Amount == ",")
        {
            MessageBox.Show("Please enter the Amount without Commas ' , '");
        }
        else if ((Time == ",") || (Time == "."))
        {
            MessageBox.Show("Please enter the Duration in Months with out any decimals or commas.");
        }
        else
        {
            monthpay = amnt * realrate / (1 - Math.Pow(1 + realrate, -time));
            totalinterest = time * monthpay - amnt;
            mtbMonPay.Text = monthpay.ToString("c");
            mtbTotalInterest.Text = totalinterest.ToString("c");


        }

2 个答案:

答案 0 :(得分:2)

最好的办法是使用TryParse:https://msdn.microsoft.com/en-us/library/26sxas5t(v=vs.110).aspx

TryParse返回一个bool,告诉您转换是否失败,如果成功,out值将具有您要查找的结果。希望这有帮助!

答案 1 :(得分:1)

你真的应该研究如何在.Net中解析用户输入。不过,您可以做的事情如下:

static bool ParseField(string fieldName, string fieldValueText, out double fieldValue)
{
    if (string.IsNullOrEmpty(fieldValueText)) 
    {
        MessageBox.Show(string.Format("Please provide an input value for '{0}'.", fieldName));
        return false;
    }
    else if (!double.TryParse(fieldValueText, out fieldValue))  
    {
        MessageBox.Show(string.Format("'{0}' is not a valid floating point value. Please provide a valid floating point input value for '{1}'.", fieldValueText, fieldName));
        return false;
    }
    return true;
}

可以用于:

bool GetInputs(out double amnt, out double rate, out double time)
{
    if (ParseField("Amount", txtAMNT.Text, out amnt) &&
        ParseField("Rate", txtRATE.Text, out rate) &&
        ParseField("Time", txtTIME.Text, out time))
    {
        // Perform additional checks on individual values if needed.
        return true;
    }
    return false;
}