出于某种原因,无论我输入“cm”还是“in”,此代码总是将b
(2.54)乘以unit_number
:
puts "Welcome to my unit conversion calculator. This calculator can convert
between Centimeters and Inches. If you could like to convert Centimeters to Inches, write: in. If you would like to convert Inches to centimeters, write: cm."
unit = gets.to_s
puts " how many of your unit would you like to convert"
unit_number = gets.to_f
a = 0.39370079
b = 2.54
if unit == 'in'
puts "your conversion is: #{ (unit_number * a)}"
else unit == 'cm'
puts "your conversion is: #{ (unit_number * b)}"
end
答案 0 :(得分:3)
gets
将捕获包含尾随新行(输入)的标准输入,因此unit
不会是'cm'
,而是"cm\n"
。您需要使用"\n"
chomp
unit = gets.chomp
您不需要将to_s
调用gets
的返回值,因为它已经是String
,else
语句应为{{} 1}}或elsif unit == 'cm'
。
答案 1 :(得分:1)
当您实际需要的是 else
语句时,您的条件会调用elsif
语句:
elsif unit == 'cm'
基本上,您目前所处的情况是您的第一个条件(即if unit == 'in'
)未得到满足(请参阅Pablo B's answer了解原因)。但是,第二个条件是,因为它是else
语句。由于第一个条件始终为false,因此else
条件始终为真。
如果您调用elsif
语句,条件将首先检查unit == 'in'
;如果不是,则检查是否unit == 'cm'
。如果两者都不为真,则条件将返回nil
。
答案 2 :(得分:0)
我确切地知道你的感受。调试很痛苦。 @akhanubis已经指出了处理#chomp
返回值所需的gets
方法。虽然我假设您编写了用于说明目的的代码,但如果您需要convert physical units for real,则只需安装 sy gem。在gem install sy
之后,您可以:
require 'sy/imperial'
7.5.inch.in :cm
#=> 19.05
42.cm.in :inch
#=> 16.5354