我是
Ruby的新手.
我需要读取用户输入(n)数字,在C中我使用此代码
我需要读取用户输入(n)数字,在C中我使用此代码
for(i=0;i<N;i++) { scanf("%d",&array[i]); }
此代码读取由任何空格(制表符,空格,换行符)分隔的完全(n)数字.
我怎么能在ruby中做到这一点?
在Ruby中我尝试这样做
require 'scanf' n = scanf("%d"); arr = Array.new() n.times { arr << scanf("%d") }
但是当我像这样输入字符串时,这段代码不起作用:
1 4 8
但如果我输入这个,工作正常
1 4 8
解决方法@H_404_23@
不得不承认,在这个例子中,我无法制作一个与C版一样紧凑的程序.在Ruby中,scanf似乎不像IO流的C版本那样工作,对于字符串,您需要提供一个块来实现每行多次扫描.
所以这是一个解决方案:
a = Array.new
n = gets.to_i
while a.length < n
gets.scanf("%d") { |d| a << d[0] }
end
你遇到的唯一问题是,如果你要求例如3个数字,然后用户在一行上输入10个数字,那么a将包含所有这10个数字.要修复它,您可以在循环完成后始终截断数组:
a = a.take(n)
无论空白区域如何,此解决方案都将从输入读取n个数字.用户可以在一行,或在单独的行上或两者的混合(我认为是您的原始要求)输入它们.
所以这是一个解决方案:
a = Array.new n = gets.to_i while a.length < n gets.scanf("%d") { |d| a << d[0] } end
你遇到的唯一问题是,如果你要求例如3个数字,然后用户在一行上输入10个数字,那么a将包含所有这10个数字.要修复它,您可以在循环完成后始终截断数组:
a = a.take(n)
无论空白区域如何,此解决方案都将从输入读取n个数字.用户可以在一行,或在单独的行上或两者的混合(我认为是您的原始要求)输入它们.