如何在C#中将用户输入转为int类型并处理非法输入?
解决C#中用户输入转整数并处理无效输入的问题
你遇到的问题根源是Console.Read()只读取单个字符的ASCII编码值,所以输入数字字符会返回对应的ASCII码(比如'1'对应49),而且输入后的换行符会被后续的Console.Read()读取,导致第二个输入直接拿到换行的ASCII码13。
要实现正确的整数转换、错误抛出,同时让转换后的值能参与数学运算,可以按以下方式修改代码:
基础实现(直接抛出异常)
使用Console.ReadLine()读取整行输入,再用int.Parse()转换——当输入不是有效整数时,int.Parse()会自动抛出FormatException,符合你需要的错误抛出需求:
Console.WriteLine("Please type number 1."); string input1 = Console.ReadLine(); int num1 = int.Parse(input1); Console.WriteLine(num1); Console.WriteLine("Please type number 2."); string input2 = Console.ReadLine(); int num2 = int.Parse(input2); Console.WriteLine(num2); // 测试数学运算 int sum = num1 + num2; Console.WriteLine($"Sum: {sum}");
如果用户输入非数字文本(比如"abc"),这段代码会直接抛出FormatException,满足你的错误抛出要求。
带异常捕获的友好提示版本
如果需要在出错时给用户提示而不是直接崩溃,可以添加异常捕获:
try { Console.WriteLine("Please type number 1."); int num1 = int.Parse(Console.ReadLine()); Console.WriteLine(num1); Console.WriteLine("Please type number 2."); int num2 = int.Parse(Console.ReadLine()); Console.WriteLine(num2); int sum = num1 + num2; Console.WriteLine($"Sum of two numbers: {sum}"); } catch (FormatException) { Console.WriteLine("错误:输入不是有效的整数,请输入数字。"); } catch (ArgumentNullException) { Console.WriteLine("错误:输入不能为空。"); }
关键点说明
Console.ReadLine():读取用户输入的一整行内容(直到按下回车),返回完整的字符串,避免了单个字符读取的问题。int.Parse():将字符串转换为整数,只有当输入是有效整数格式时才成功,否则抛出异常。- 转换后的
int变量可以直接参与加减乘除等数学运算,完全满足你的需求。
内容的提问来源于stack exchange,提问作者CodingFox
相关产品推荐
相关产品推荐

