-1

出于某种原因,无论我输入“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
4

3 回答 3

3

gets将捕获标准输入输入,包括尾随的新行(回车),所以unit不会是'cm',而是会是"cm\n". 您需要"\n"使用以下命令删除尾随chomp

unit = gets.chomp

您不需要调用to_sof 的返回值,gets因为它已经是 a String,并且else语句应该是elsif unit == 'cm'or else if unit == 'cm'

于 2013-09-08T23:54:17.947 回答
1

else当您真正需要的是一个语句时,您的条件调用一个elsif语句:

elsif unit == 'cm'

基本上,您目前所遇到的情况是您的第一个条件(即if unit == 'in')未得到满足(请参阅Pablo B 的答案以了解原因)。但是,满足第二个条件因为它是一个else语句。由于第一个条件始终为假,因此else条件将始终为真。

相反,如果您调用elsif语句,则条件将首先检查是否unit == 'in'; 如果不是,则检查是否unit == 'cm'. 如果两者都不为真,则条件将返回nil

于 2013-09-09T00:09:22.777 回答
0

我很清楚你的感受。调试很痛苦。@akhanubis 已经向您指出了处理您的返回值#chomp所需的方法。gets虽然我假设您编写代码是出于教学目的,但如果您需要将物理单位转换为 real,只需安装sy gem。之后gem install sy,您可以:

require 'sy/imperial'

7.5.inch.in :cm
#=> 19.05
42.cm.in :inch
#=> 16.5354
于 2013-09-09T02:36:41.863 回答