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

C#控制台程序:如何用while循环实现有效输入验证?

C#命令行程序循环问题修复与代码优化

循环逻辑错误修复

你的while循环条件逻辑完全错误:使用||(逻辑或)时,只要有一个条件为true,整个表达式就为true。比如输入合法的"add",response != "Add"依然成立,导致循环永远无法退出。

正确的处理思路是:

  • 将用户输入统一转为小写(或大写),消除大小写差异
  • 判断输入是否不在合法操作列表中,用while循环直到输入合法

代码冗余优化

你重复判断大小写、重复编写相同的输出逻辑,可通过以下方式精简:

  1. 统一处理输入大小写,避免重复判断不同格式的字符串
  2. 使用switch语句替代多个if判断,逻辑更清晰
  3. 延迟计算结果:不需要提前计算所有操作的结果,只在用户选择对应操作后再计算(还能避免除数为0的提前报错)

优化后的完整代码

Console.WriteLine("Would you like me to add, subtract, multiply, or divide these numbers?");

// 初始化输入变量
string response = string.Empty;
// 定义合法操作列表,便于后续维护
var validOperations = new List<string> { "add", "subtract", "multiply", "divide" };

// 循环获取合法输入
while (!validOperations.Contains(response.ToLower()))
{
    // 第一次循环不提示错误,仅输入无效时提示
    if (!string.IsNullOrEmpty(response))
    {
        Console.WriteLine("I didn't understand that, could you try again?");
    }
    response = Console.ReadLine() ?? string.Empty;
}

// 根据用户选择计算结果
double result = 0;
string operationName = string.Empty;

switch (response.ToLower())
{
    case "add":
        result = num1 + num2;
        operationName = "add";
        break;
    case "subtract":
        result = num1 - num2;
        operationName = "subtract";
        break;
    case "multiply":
        result = num1 * num2;
        operationName = "multiply";
        break;
    case "divide":
        // 新增除数为0的判断,避免程序崩溃
        if (num2 == 0)
        {
            Console.WriteLine("Error: Cannot divide by zero!");
            Console.ReadKey();
            return;
        }
        result = num1 / num2;
        operationName = "divide";
        break;
}

// 统一输出逻辑,消除重复代码
Console.Beep();
Console.WriteLine($"Good choice! I will now {operationName} these numbers.");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"{userName}, your total is {result}!");
Console.ResetColor(); // 重置控制台颜色,避免影响后续输出
Console.ReadKey();

优化细节说明

  • 输入处理:用ToLower()统一转为小写,无需再判断不同大小写的字符串
  • 循环逻辑:通过validOperations.Contains()判断输入合法性,逻辑清晰且便于后续新增操作
  • 代码复用:将重复的输出逻辑合并,仅在switch中处理差异化的计算逻辑
  • 错误防护:新增除数为0的判断,避免运行时异常
  • 体验优化:第一次循环不显示错误提示,减少不必要的干扰;重置控制台颜色,保证后续输出正常

内容的提问来源于stack exchange,提问作者ElateTugboat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:33:39