Проблемы с выводом и вводом информации в командную строку с помощью Ruby sciTE - PullRequest
0 голосов
/ 22 февраля 2012

Я пишу программу на Ruby, но у меня возникают проблемы с получением информации из командной строки с помощью текстового редактора sciTE.Например, когда я пытаюсь запустить код, который требует ввода от пользователя (например, ставит «Пожалуйста, введите ваше имя:» name = gets ()), появляется командная строка, но информация, которую я «помещаю» на экран, делаетне показывать.Когда я пытаюсь ввести информацию (буквы или цифры), ничего не происходит.Затем я закрываю командную строку и получаю код ошибки в окне вывода sciTE.Какие-нибудь мысли?Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2013

Я столкнулся с этой проблемой сегодня, изучая урок г-на Соседства по Ruby, и выработал ответ.Это известная проблема с SciTE и способ взаимодействия с stdin (gets()) в Windows.

Чтобы запустить учебный код как есть, используйте командную строку для запуска вашей программы, а не SciTEКлавиша «Вперед» [F5] упоминается в «Маленькой рубиновой книге» мистера Соседства:

Обходной путь 1:

  1. В вашей установке Windows Ruby должен быть ярлык (в разделе «Пуск»).меню) называется «Запустить командную строку с Ruby».Запустите его.
  2. В командной строке Ruby перейдите к пути, в котором находится ваш файл Hello World Ruby.
  3. Введите ruby hello.rb и нажмите [Enter].(Замените hello.rb на имя вашего файла.)

Обходной путь 2:

Другой альтернативой является игнорирование неработающей командной строки и использование внутренней SciTE.Но для этого необходимо добавить $stdout.flush() после каждого оператора puts(), например:

puts "Hello, world. What is your name?"  
$stdout.flush()  # Add this line!  
myname = gets()  
puts "Well, hello there " + myname + "."  
$stdout.flush()  # Add this line!  

Примечание

Следующее несоответствие в главе 0 руководства, которое вы, вероятно, вероятнонемедленно обратите внимание, что символ новой строки (\ n) включен в переменную myname (входные данные из gets()).Вероятно, вы увидите следующий вывод (обратите внимание на «.» Во второй строке):

Well, hello there Yournamehere  
.  

Чтобы исправить это, измените myname.gets() на myname.gets().chomp().(Не стесняйтесь искать chomp () в онлайн-документации по Ruby.)

0 голосов
/ 22 февраля 2012
I do hope I understand what you want to do, but this is a sample here from my irb prompt:

1.9.2-p290 :001 > def a
1.9.2-p290 :002?>   puts "what is your name"
1.9.2-p290 :003?>   name = gets.chomp
1.9.2-p290 :004?>   puts "My name is #{name}"
1.9.2-p290 :005?>   end
 => nil 
1.9.2-p290 :006 > a
what is your name
abbb
My name is abbb
 => nil 
1.9.2-p290 :007 > 
...