我还在学习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");
}
答案 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;
}