[英]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.