簡體   English   中英

C#-嘗試將用戶輸入解析為int時出現錯誤

[英]C#- Getting error when trying to parse user input to int

我是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上將該程序作為控制台應用程序運行。

您需要處理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為止。

這是一個常見問題-每次解析用戶生成的輸入時,都需要確保以正確的格式輸入了輸入。 這可以通過異常處理或通過自定義邏輯(如上所述)來處理不正確的輸入來完成。 永遠不要信任用戶正確輸入值。

您正在使用Visual Studio嗎? 默認情況下,其他一些IDE可能會以非交互模式運行控制台應用程序。 例如,我知道在MonoDevelop中,您必須專門更改項目屬性,以便程序可以在外部控制台中運行。

對數字輸入進行正則表達式可能會更好,更防彈,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM