You need to enable JavaScript to run this app. C#控制台计算器输入非Add选项时Console.ReadLine()无响应
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台计算器输入非Add选项时Console.ReadLine()无响应

核心问题定位

Console.ReadLine()功能完全正常,异常来源是代码的输入读取逻辑设计错误。

错误逻辑拆解

当前所有分支判断条件中,每一个if/else if都独立调用了一次Console.ReadLine()读取控制台输入:

  • 判断Add的首个分支:调用一次Console.ReadLine()读取用户输入
  • 后续判断Sub、Mul、Div、Quad Equation的所有分支:每一个判断条件内,都重复调用了一次Console.ReadLine()

实际运行流程说明

以输入Sub选择减法功能为例,完整执行路径是:

  1. 首个if条件触发Console.ReadLine(),读取到用户输入的Sub,校验发现不等于"Add",跳过该分支
  2. 代码向下执行到第一个else if判断,此时再次触发新的Console.ReadLine()调用,程序会在此处暂停,等待用户输入新的一行内容
  3. 此时用户已经完成初始菜单选项的输入,等待程序执行后续计算流程,就会感知到程序“无响应、无报错”——本质是程序卡在等待第二次输入的状态,并非崩溃。

输入Add时流程正常的原因:Add对应首个判断分支,读取到用户输入的Add后直接匹配成功进入计算流程,不会触发后续else if分支里的重复读取操作。

修正方案

仅对菜单输入执行一次读取操作,将结果存储到变量中,所有分支判断统一使用该变量做匹配,避免重复读取:

// 单次读取菜单输入,存入变量
string selectedOperation = Console.ReadLine();

if (selectedOperation == "Add")
{
    // 原有加法逻辑
}
else if (selectedOperation == "Sub")
{
    // 原有减法逻辑
}
else if (selectedOperation == "Mul")
{
    // 原有乘法逻辑
}
else if (selectedOperation == "Div")
{
    // 原有除法逻辑
}
else if (selectedOperation == "Quad Equation")
{
    // 原有二次方程求解逻辑
}

可优化的细节点

  • 当前数字输入使用Convert.ToInt32()做类型转换,但变量定义为double类型,可替换为Convert.ToDouble()支持小数输入
  • 二次方程求解模块,需要对判别式b²-4ac做有效性判断:当值为负数时,不能直接执行平方根计算,否则会返回无效的非数字结果
  • 除法模块需要增加0值判断:当用户输入的第二个除数为0时,给出有效提示,避免触发除以0的运行时异常
  • 增加兜底分支:当用户输入的内容不在可选菜单范围内时,输出提示告知用户输入无效,引导重新选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 22:24:08