2017-02-10 38 views
-2

My Code Terminates only on Control+Z but not then i enter "0"рубин STDIN Прервать на входе

Я сортировка блинов и я получил сортировку права, однако, что мне нужно сделать сейчас, чтобы убедиться, что программы завершается, когда я вхожу «0» значение

Это то, с чем я борюсь, потому что я только программа выхода с Control + Z

Как я могу изменить свой код, чтобы каждый раз, когда вводится «0», завершается программа?

for p_stack in STDIN.read.split("\n") 
    if p_stack != "0" 
     pancakes_arr = p_stack.split(" ") 
     array_n = [] 
     pancakes_arr.each {|n| array_n << n.to_i} 
     print p_stack + "\n" + pancakes_sorting_stack(array_n) 

    else p_stack == "0" 
      print "0\n" 
      break  

конец

+0

Пожалуйста, пост код здесь обычный текст , а не как изображения, которые трудно читать, не могут быть скопированы, чтобы помочь проверить код или использовать в ответах, и враждебны тем, кто использует программы чтения с экрана. Вы можете изменить свой вопрос, чтобы добавить код в свой вопрос. Используйте кнопку '{}' для форматирования любых блоков кода или отступов с четырьмя пробелами для того же эффекта. – tadman

+0

для p_stack в STDIN.read.split ("\ п") \t \t если p_stack! = "0" \t \t \t pancakes_arr = p_stack.split (»«) \t \t \t array_n = [] \t \t \t pancakes_arr.each {| n | array_n << n.to_i} \t \t \t печать p_stack + "\ п" + pancakes_sorting_stack (array_n) \t \t еще p_stack == "0" \t \t \t \t печать "0 \ п" \t \t \t \t перерыв \t \t конец – TopS

+0

Также почему бы не просто сломать пустую строку вместо какого-либо произвольного значения, как ноль? – tadman

ответ

1

Рубин вообще не ленивые вычисления (возможно, вы привыкли к Haskell?). Это означает, что когда Ruby оценивает STDIN.read, он будет читать все ввода вашего стандартного входного канала до его возврата и позволяет начать обработку вашего ввода. Так что к тому времени ваш код сравнивает p_stack 0, вход уже все читали в Вот другая программа, которая имеет поведение терминации вы хотели, используя IO#each_line:.

STDIN.each_line do |line| 
    p_stack = line.chomp 
    if p_stack != "0" 
    puts 'hi' 
    else 
    puts '0' 
    break 
    end 
end 
+0

Вы также можете 'line.chomp!', Чтобы избежать вторичной переменной. – tadman