【发布时间】:2013-07-16 12:52:45
【问题描述】:
我正在制作一个控制台应用程序,我将在其中向用户询问电话号码 int main_phone,但如果他键入一个不能转换为 int 的字符串,例如“Caramel”,我想给他一个警告并求个号码。
好吧,我认为递归函数可以,但我缺乏这方面的逻辑能力。我想出的是以下代码sn-p:
static int? TryParse(string str)
{
int tmp;
if (int.TryParse(str, out tmp)) {
return tmp;
}
return null;
}//End of TryParse();
static int? verifyParse(string str, string lable)
{
int? testedVar = TryParse(str);
if (testedVar == null)
{
Console.WriteLine("Este campo pode apenas conter dígitos de 0 à 9.");
Console.Write(lable);
verifyParse(Console.ReadLine(), lable);
return null;
}
else
{
return testedVar;
}
}//End of verifyParse();
Console.Write("Phone(main):");
int? main_phone = verifyParse(Console.ReadLine(),"Telefone (Principal):");
问题是如果用户输入“字符串”main_phone 会返回为空,那么它会要求一个介于 0 和 9 之间的数字,但是即使用户传递了一个可转换的字符串,例如“12”,main_phone 仍然会为空。
我该如何解决这个问题?
编辑 1:
我真正需要的是一个函数,如果可以将字符串转换为 int,它会返回 int,否则它会给我一个错误并要求我输入 0 到 9 之间的值。我觉得这很难,因为该函数会必须能够返回一个 int 或重新运行它(要求并测试一个有效的输入),但它不能,因为它要么返回 int,要么什么都不返回。
编辑 2:
这是我的问题的一些更新:
static int TryParse(string lable)
{
string str = Console.ReadLine();
Regex regex = new Regex(@"\d+");
while (!regex.IsMatch(str))
{
Console.WriteLine("Insira apenas dígitos de 0-9, por favor.");
Console.Write(lable);
str = Console.ReadLine();
}
return Convert.ToInt32(str);
}//End of TryParse();
Console.Write("Telefone (Principal):");
int main_phone = TryParse("Telefone (Principal):");
它工作得非常好,除非我输入“1a”之类的东西。在这种情况下,我会收到此错误:
System.FormatException:输入字符串的格式不正确。 在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 在 System.Number.ParseInt32(String s,NumberStyles 样式,NumberFormatInfo 信息) 在 System.Convert.ToInt32(字符串值) 在 App1.Program.TryParse(字符串标签) 在 App1.Program.Main(String[] args)【问题讨论】:
-
正则表达式将是一条不错的路线。然后你也可以很容易地接受带有连字符的数字
-
我刚刚运行了您的示例。如果用户输入可转换字符串,main_phone 在我这边不会返回为 null。由 Console.WriteLine(main_phone) 验证。对不起,如果我误解了你的目标。
-
@Ali.NET 尝试运行它并输入“sodapop”,然后当它给你一个错误并要求输入任何数字时。您会看到它没有返回 number ,而是返回 null。
-
你真的不想/不需要递归。你需要一个简单的 while 循环,当输入有效时退出,就像我的回答一样
标签: c# function parsing recursion types