You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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);

修正后的代码

解决核心问题:

  1. 修复变量名错误(line改为read)
  2. 正确使用布尔变量控制循环:成功执行完try块(无异常)时设置循环终止条件,捕获到异常时设置循环继续
  3. 严格遵循不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:31:03