如何让C#矩形面积计算程序循环直至用户输入有效整数?
C#矩形面积计算程序输入验证问题
需要实现一个C#矩形面积计算程序,要求持续提示用户输入数字,直到输入正确的整数类型才停止,不能直接退出程序。尝试用do-while循环结合异常处理实现,但循环条件设置错误(比如用Exception对象作为循环条件);也曾尝试用布尔变量控制循环,但未成功,且要求不能使用if语句。
原错误代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace test1 { class Program { static void Main(string[] args) { //声明并初始化变量 int a = 0; int b = 0; int area = 0; string read; do { try { //请求输入数据 Console.WriteLine("Rectangle height: "); read = Console.ReadLine(); a = int.Parse(line); // 错误:未定义变量line,应使用read Console.WriteLine("Rectangle width: "); read = Console.ReadLine(); b = int.Parse(line); // 同样的变量错误 //计算面积 area = a * b; //输出结果 Console.WriteLine("The area of the rectangle is: " + area + " cm²"); } catch (Exception e) { Console.WriteLine("ERROR. Wrong data type."); } }while (e); // 错误:不能用Exception对象作为循环条件 } } }
曾尝试的错误修改
Console.WriteLine("The area of the rectangle is: " + area + " cm²"); cont = false; } catch (Exception e) { Console.WriteLine("ERROR. Ingresa un numero entero."); cont = false; // 错误:此处应设为true以继续循环 } }while (cont);
修正后的代码
解决核心问题:
- 修复变量名错误(
line改为read) - 正确使用布尔变量控制循环:成功执行完try块(无异常)时设置循环终止条件,捕获到异常时设置循环继续
- 严格遵循不使用if语句的要求,完全依赖异常处理和布尔变量控制流程
using System; namespace test1 { class Program { static void Main(string[] args) { int height = 0; int width = 0; int area = 0; string input; bool keepLooping = true; // 控制循环的布尔变量 do { try { Console.WriteLine("请输入矩形的高度:"); input = Console.ReadLine(); height = int.Parse(input); Console.WriteLine("请输入矩形的宽度:"); input = Console.ReadLine(); width = int.Parse(input); area = height * width; Console.WriteLine($"矩形的面积是:{area} cm²"); keepLooping = false; // 成功计算,终止循环 } catch { Console.WriteLine("错误:请输入有效的整数!"); keepLooping = true; // 输入错误,继续循环 } } while (keepLooping); } } }
关键说明
- 移除了不必要的命名空间引用,简化代码结构
- 变量名改为语义化名称(
a→height,b→width),提升可读性 - 使用字符串插值
$""优化输出格式,替代繁琐的字符串拼接 - 捕获异常时无需声明Exception对象(未使用时可省略),直接
catch {}即可 - 全程未使用if语句,完全通过异常处理判断输入有效性,并用布尔变量控制循环逻辑
内容的提问来源于stack exchange,提问作者valeria
相关产品推荐
相关产品推荐

