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
相关产品推荐
相关产品推荐

