ruby 我用gets来得到一个人的年龄(20),然后把age加40,打印4060 [已关闭]

3lxsmp7m  于 2022-12-12  发布在  Ruby
关注(0)|答案(1)|浏览(98)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭。
这篇文章5天前被编辑并提交审查。
Improve this question
这是一个非常基本的问题,我知道,但我不知道为什么我得到这个错误。下面是代码:

puts "How old are you?"
 age = gets.chomp.to_i
 puts "In 10 years you will be:"
 puts age +  10
 puts "In 20 years you will be:"
 puts age +  20
 puts "In 30 years you will be:"
 puts age +  30
 puts "In 40 years you will be:"
 puts age +  40

下面是我在irb中运行时的代码:

ex1.rb(main):005:0> puts "How old are you?"
How old are you?
=> nil
ex1.rb(main):006:0> age = gets.chomp.to_i
20
=> 20
ex1.rb(main):007:0> puts "In 10 years you will be:"
In 10 years you will be:
=> nil
ex1.rb(main):008:0> puts age +  10
30
=> nil
ex1.rb(main):009:0> puts "In 20 years you will be:"
In 20 years you will be:
=> nil
ex1.rb(main):010:0> puts age +  20
40
=> nil
ex1.rb(main):011:0> puts "In 30 years you will be:"
In 30 years you will be:
=> nil
ex1.rb(main):012:0> puts age +  30
50
=> nil
ex1.rb(main):013:0> puts "In 40 years you will be:"
In 40 years you will be:
=> nil
ex1.rb(main):014:0> puts age +  4060
=> nil

我不明白为什么我会得到最后一行代码。正如你所看到的,程序的其余部分运行正常,只是将两个整数相加,然而,最后一行代码似乎将两个整数相加,然后将乘积作为字符串加到数字40上。我试图搜索这个答案,但没有找到太多,这里会不会有其他错误?
我试过传递不同的整数,它总是显示40加上40。例如,如果我传递30,它将显示4070;如果我超过50,它将显示4090。如果我超过30,我将期望只得到70,或者如果我超过50,我将期望只得到90。
编辑:我想添加以下详细信息。上面的代码是文件中唯一的代码,我已经尝试将此代码复制并粘贴到一个新文件中,然后用IRB对新文件进行评级,以获得与上面相同的结果。如果有任何其他信息我可以提供,请让我知道。
EDIT 2:我已经尝试在replit中运行代码,并且得到了预期的结果。这显然让我相信当我通过irb运行代码时有什么错误,但我没有足够的经验知道它是什么。下面是当我运行xxd thiscode.rb时的终端输出:

00000000: 7075 7473 2022 486f 7720 6f6c 6420 6172  puts "How old ar
00000010: 6520 796f 753f 220a 6167 6520 3d20 6765  e you?".age = ge
00000020: 7473 2e63 686f 6d70 2e74 6f5f 690a 7075  ts.chomp.to_i.pu
00000030: 7473 2022 496e 2031 3020 7965 6172 7320  ts "In 10 years 
00000040: 796f 7520 7769 6c6c 2062 653a 220a 7075  you will be:".pu
00000050: 7473 2061 6765 202b 2020 3130 0a70 7574  ts age +  10.put
00000060: 7320 2249 6e20 3230 2079 6561 7273 2079  s "In 20 years y
00000070: 6f75 2077 696c 6c20 6265 3a22 0a70 7574  ou will be:".put
00000080: 7320 6167 6520 2b20 2032 300a 7075 7473  s age +  20.puts
00000090: 2022 496e 2033 3020 7965 6172 7320 796f   "In 30 years yo
000000a0: 7520 7769 6c6c 2062 653a 220a 7075 7473  u will be:".puts
000000b0: 2061 6765 202b 2020 3330 0a70 7574 7320   age +  30.puts 
000000c0: 2249 6e20 3430 2079 6561 7273 2079 6f75  "In 40 years you
000000d0: 2077 696c 6c20 6265 3a22 0a70 7574 7320   will be:".puts 
000000e0: 6167 6520 2b20 2034 30                   age +  40
qmelpv7a

qmelpv7a1#

  • 注意:您的代码中可能有一个bug,您没有向我们展示。*

最好的办法是显式地进行转换,如果无法成功转换值,则引发异常。例如:

def future_age current_age, years_from_now
  Integer(current_age) + Integer(years_from_now)
end

age = gets.chomp
[10, 20, 30, 40].each do |years|
  puts "In #{years} years you will be #{future_age age, years}."
end

这种方法的好处是,如果#future_age的任何一个参数不能被强制为Integer,就会引发一个异常。这至少会给你指出bug的来源,或者给予你正确的答案。无论哪种方式,它都会解决你的问题。

相关问题