C# - 尝试将用户输入解析为int时出错

时间:2010-09-08 19:01:34

标签: c# parsing user-input

我是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上运行该程序作为控制台应用程序。

3 个答案:

答案 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);
}