我是c#的新手,当我运行此方法时,我无法弄清楚为什么我一直得到'FormatException未处理'错误:
public void bet()
{
int betAmount;
Console.WriteLine("How much would you like to bet?");
betAmount = int.Parse(Console.ReadLine());
Console.WriteLine(_chips - betAmount);
}
程序不会停止等待用户输入,我不知道为什么会这样?
如何让程序在此方法中等待用户的输入?
**我在Microsoft Visual C#2010 Express上运行该程序作为控制台应用程序。
答案 0 :(得分:7)
您需要处理Console.ReadLine()
返回非整数值的情况。在您的情况下,您可能会收到该错误,因为输入的内容不正确。
您可以通过切换到TryParse:
来解决此问题public void bet()
{
int betAmount;
Console.WriteLine("How much would you like to bet?");
while(!int.TryParse(Console.ReadLine(), out betAmount))
{
Console.WriteLine("Please enter a valid number.");
Console.WriteLine();
Console.WriteLine("How much would you like to bet?");
}
Console.WriteLine(_chips - betAmount);
}
如果用户键入除整数之外的其他内容, int.TryParse
将返回false。上述代码将导致程序不断重新提示用户,直到他们输入有效数字而不是提升FormatException
。
这是一个常见问题 - 每次解析用户生成的输入时,都需要确保以正确的格式输入输入。这可以通过异常处理或通过自定义逻辑(如上所述)来处理不正确的输入。永远不要相信用户正确输入值。
答案 1 :(得分:0)
您使用的是Visual Studio吗?默认情况下,某些其他IDE可能以非交互模式运行控制台应用程序。例如,我知道在MonoDevelop中你必须专门更改项目属性,以便程序在外部控制台中运行,如果你想这样做。
答案 2 :(得分:-1)
对于数字输入执行正则表达式可能会更好,更具防弹性,例如:
public static Regex NumInpRegex = new Regex(
"^(?<inp_num>\\d+)$",
RegexOptions.IgnoreCase
| RegexOptions.Singleline
| RegexOptions.ExplicitCapture
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
);
string InputText = Console.ReadLine();
Match m = NumInpRegex.Match(InputText);
if (m.Success && InputText.Length > 0){
betAmount = int.Parse(m.Groups["inp_num"].Value);
Console.WriteLine(_chips - betAmount);
}