Ruby计算器程序判定输入运算符无效问题求助
Ruby计算器程序问题解决
核心问题
输入包含换行符
gets方法读取用户输入时,会把用户按下的回车键(换行符\n)也包含在返回的字符串里。比如你输入+后回车,operator的实际值是"+\\n",和你判断的"+"完全不相等,所以程序必然进入else分支。输入的数字是字符串类型
直接通过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
相关产品推荐
相关产品推荐

