加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby如何在scanf样式中读取用户输入,如在C中

发布时间:2020-12-16 23:29:13 所属栏目:百科 来源:网络整理
导读:我是 Ruby的新手. 我需要读取用户输入(n)数字,在C中我使用此代码 for(i=0;iN;i++){ scanf("%d",array[i]);} 此代码读取由任何空格(制表符,空格,换行符)分隔的完全(n)数字. 我怎么能在ruby中做到这一点? 在Ruby中我尝试这样做 require 'scanf'n = scanf("%d"
我是 Ruby的新手.
我需要读取用户输入(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

解决方法

不得不承认,在这个例子中,我无法制作一个与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个数字.用户可以在一行,或在单独的行上或两者的混合(我认为是您的原始要求)输入它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读