Ler a entrada do console em Ruby?


115

Quero escrever um programa A + B simples em ruby, mas não tenho ideia de como trabalhar com o console.


10
Estou falando sobre Ruby, mas não ROR. Não há nenhuma palavra sobre a entrada do console.
Sergey

Respostas:


228

Você está falando gets?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

Algo parecido?

Atualizar

Kernel.getstenta ler os parâmetros encontrados em ARGVe só pede para consolar se não for ARGVencontrado. Para forçar a leitura do console, mesmo se ARGVnão estiver vazio, useSTDIN.gets


59
Tenho um conflito com esta solução: Kernel.getstenta ler os arquivos encontrados ARGVe só pede console se não ARGVencontrar. Para forçar a leitura do console, mesmo se ARGVnão estiver vazio, use STDIN.gets.
fguillen

3
a.to_ie b.to_ipoderia ser melhor
Dorian

é gets bloqueando? Se não, existe algum substituto que está bloqueando?
noMAD de

1
@fguillen é uma ótima resposta e não deve ser escondida nos comentários. Você poderia responder, por favor? Obrigado!
Dan Rosenstark

2
@Yar obrigado pela sugestão, adicionei uma atualização à própria resposta.
fguillen

28

você também pode passar os parâmetros por meio da linha de comando. Os argumentos da linha de comando são armazenados na matriz ARGV. então ARGV [0] é o primeiro número e ARGV [1] o segundo número

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

e você chama assim

% ./plus.rb 5 6
==> 11

10

Existem muitas maneiras de obter a opinião dos usuários. Eu pessoalmente gosto de usar o método gets. Quando você usa gets, ele obtém a string que você digitou, e isso inclui a tecla ENTER que você pressionou para encerrar sua entrada.

name = gets
"mukesh\n"

Você pode ver isso no irb ; digite isso e você verá o \ n, que é o caractere de “nova linha” que a tecla ENTER produz: Digite, name = getsvocê verá algo como "mukesh\n" Você pode se livrar do caractere de nova linha irritante usando chomp método .

O método chomp devolve a string, mas sem a nova linha de terminação. Belo salvador de vidas com método chomp.

name = gets.chomp
"mukesh"

Você também pode usar o terminal para ler a entrada. ARGV é uma constante definida na classe Object . É uma instância da classe Array e tem acesso a todos os métodos de array. Por ser um array, mesmo sendo uma constante, seus elementos podem ser modificados e limpos sem problemas. Por padrão, Ruby captura todos os argumentos de linha de comando passados ​​para um programa Ruby (dividido por espaços) quando o binário de linha de comando é invocado e os armazena como strings no array ARGV .

Quando escrito dentro do seu programa Ruby, o ARGV tomará um comando de linha de comando semelhante a este:

test.rb hi my name is mukesh

e crie uma matriz parecida com esta:

["hi", "my", "name", "is", "mukesh"]

Mas, se eu quiser passar uma entrada limitada, podemos usar algo assim.

test.rb 12 23

e use essas entradas como esta em seu programa:

a = ARGV[0]
b = ARGV[1]

5

se você quiser manter os argumentos do Terminal, tente o seguinte código:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"

0

Se você deseja fazer um console interativo:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

Uso (supondo que você coloque o snippet acima no summatorarquivo do diretório atual):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Use Ctrl + Dpara sair

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.