Как я могу получить пользовательский ввод из командной строки с этой программой? - PullRequest
0 голосов
/ 15 марта 2020

Я использую Ruby для этой программы, которая в основном вычисляет, сколько пятерок и тройок вам нужно, чтобы получить сумму ввода. Теперь я имею дело с проблемой, я могу заставить его работать, когда мне нужно ввести из cmd, например, ruby filename.rb 123

begin

    x = Integer(gets.chomp)  
    rescue
        puts "Please input an integer"
        retry
    end
    y = 5
    atlikums = x % y
    if x % 10 == 1     
        puts   " #{(x / 5) - 1} five cent, 2 three cent "

    elsif x > 100 && x % 10 == 5 
        puts " #{x / 5} five cent " 

    elsif x < 8  
        puts "Minimal amount is 8 cents"

    elsif x==9
        puts "#{x/3} three cents"

    elsif atlikums == 0 
        puts " #{x / 5} five cents"  

    elsif atlikums == 1 
        puts " #{(x / 5) - 1} five cents, 2 three cent"

    elsif atlikums == 2
        puts " #{(x / 5) - 2} five cents, 4 three cent " 

    elsif atlikums == 3
        puts " #{x/ 5} five cents, 1 three cent" 

    elsif atlikums == 4
        puts " #{x/ 5} five cents, 3 three cent" 

    end

Я уже пробовал x = ARGV, но idk, который не работает

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

Когда вы хотите использовать аргументы командной строки, вы обычно сначала проверяете, достаточно ли передано аргументов (проверяя ARGV.length), затем обращаетесь к аргументам в массиве ARGV, присваивая их некоторым переменным с описательным именем, и, наконец, выполняете некоторые работают с этими переменными.

Например, у вас есть программа, которая добавляет два числа (add.rb):

# Check if there are at least two command line arguments passed to the program
if ARGV.length < 2
  puts "Two arguments are required."
  puts "USAGE: ruby #{File.basename(__FILE__)} FIRST_NUMBER SECOND_NUMBER"
  exit
end
# Assign command line arguments to descriptively named variables
firstNum  = ARGV[0].to_i
secondNum = ARGV[1].to_i

# Perform some work
sum = firstNum + secondNum
puts "#{firstNum} + #{secondNum} = #{sum}"

Вы можете запустить ее следующим образом:

$ ruby add.rb 2 5
2 + 5 = 7

Вы заметили, что можете передавать не целые числа в эту программу, и она потерпит неудачу. Чтобы исправить это, вы можете добавить некоторые логи проверки c, например:

if ARGV[0] =~ /^[0-9]+$/
  puts "First argument should be an integer"
  exit
end

Это может быть решением, но, скорее всего, вы будете реализовывать что-то, что уже было реализовано (например, проверка, является ли строка целое число), вы рискуете, что ваша проверка может не работать с некоторыми крайними случаями, и вы делаете свою программу слишком сложной. В тех случаях, когда ваша логика обработки аргументов командной строки c становится немного больше, чем вы действительно хотите иметь дело, вы должны использовать либо OptionParser из стандартной библиотеки ruby, либо некоторые -standard библиотека анализа параметров командной строки .

0 голосов
/ 15 марта 2020

ARGV - это массив. Вы должны получить его первый элемент.

print ARGV  # An array
x = ARGV[0]
print x

С ruby filename.rb 123, ARGV равно ["123"] и x равно "123".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...