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

Ruby读取多行输入计算商品应付金额时程序异常终止返回零的问题求助

我来帮你排查这个问题,顺便给你靠谱的解决办法!

问题原因分析

你的程序提前终止且返回零,大概率是下面两个核心原因之一:

  • 输入不完整,未提供两行数据:
    代码里用了两次gets来读取两行输入,但如果只输入了一行(甚至没输完一行就触发了结束输入的操作,比如命令行按Ctrl+D/Ctrl+Z),第二个gets会拿到nil。这时候code_product_2、units_product_2、price_product_2都会被赋值为nil,而Ruby里nil.to_i和nil.to_f都会返回0,最终总和自然就是0了。
  • 输入格式不符合要求(比如误用逗号做小数点):
    题目要求单价用点.作为小数点分隔符,如果输入时误用了逗号,(比如写成5,30而不是5.30),to_f方法会直接忽略逗号后的内容,只解析出整数部分。如果刚好两个商品的单价都被解析成0,或者数量为0,结果也会是0。不过这种情况相对少见,更可能是输入不完整的问题。

解决方案

1. 先确保输入符合规范

运行程序时严格按照要求操作:

  • 分两行输入,每行三个值(商品代码、数量、单价),用空格隔开
  • 单价必须用点.做小数点,比如5.30
  • 输入第一行后按回车,再输入第二行,最后按回车完成输入(不要提前按结束输入的快捷键)

2. 增强代码的输入验证(推荐)

给代码加上输入校验逻辑,确保每一行都有三个有效值,避免因为输入错误导致的异常结果。修改后的代码如下:

# 读取并验证第一行输入
line1 = gets&.chomp
until line1 && line1.split.size == 3
  puts "请输入第一行数据(格式:商品代码 数量 单价,用空格分隔):"
  line1 = gets&.chomp
end
code_product_1, units_product_1, price_product_1 = line1.split

# 读取并验证第二行输入
line2 = gets&.chomp
until line2 && line2.split.size == 3
  puts "请输入第二行数据(格式:商品代码 数量 单价,用空格分隔):"
  line2 = gets&.chomp
end
code_product_2, units_product_2, price_product_2 = line2.split

# 计算并输出结果
total = (units_product_1.to_i * price_product_1.to_f) + (units_product_2.to_i * price_product_2.to_f)
puts "VALOR A PAGAR: R$ #{'%.2f' % total}"

这段代码会检查每一行是否有三个值,如果输入不符合要求,会提示用户重新输入,彻底避免nil变量导致的零值问题。

测试验证

用题目给出的示例输入测试:

12 1 5.30
16 2 5.10
运行修改后的代码,会正确输出:
VALOR A PAGAR: R$ 15.50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:18:11