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

Ruby计算器程序判定输入运算符无效问题求助

Ruby计算器程序问题解决

核心问题

  1. 输入包含换行符
    gets方法读取用户输入时,会把用户按下的回车键(换行符\n)也包含在返回的字符串里。比如你输入+后回车,operator的实际值是"+\\n",和你判断的"+"完全不相等,所以程序必然进入else分支。

  2. 输入的数字是字符串类型
    直接通过gets获取的数字是字符串格式,不转换类型的话,算术运算会出错(比如字符串相加是拼接而非数值求和)。

修正后的代码

def add(first_number, second_number)
    first_number + second_number
end

def subtract(first_number, second_number)
    first_number - second_number
end

def multiply(first_number, second_number)
    first_number * second_number
end

def divide(first_number, second_number)
    first_number / second_number
end

def mod(first_number, second_number)
    first_number % second_number
end

def main()
    puts "First number: "
    first_number = gets.chomp.to_f  # 去掉换行并转成浮点数

    puts "Operator (+, -, *, /, %): "
    operator = gets.chomp  # 去掉换行符

    puts "Second number: "
    second_number = gets.chomp.to_f

    result = case operator
             when "+" then add(first_number, second_number)
             when "-" then subtract(first_number, second_number)
             when "*" then multiply(first_number, second_number)
             when "/" then divide(first_number, second_number)
             when "%" then mod(first_number, second_number)
             else "Invalid operator. Please try again."
             end

    puts "Result: #{result}"  # 用字符串插值更符合Ruby风格
end

main()

额外优化说明

  • 用case语句替代多分支if-elsif,代码更简洁易读,符合Ruby的风格。
  • 字符串插值#{result}比字符串拼接"Result: " + result更安全,当result是数值类型时不会报错(原代码中如果进入非else分支,result是数值,用+拼接字符串会报错)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:24:16