Проблемы с выводом и вводом информации в командную строку с помощью Ruby sciTE

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


person Marc Glanton    schedule 22.02.2012    source источник


Ответы (1)


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

Чтобы запустить код учебника как есть, используйте командную строку для запуска вашей программы, а не клавишу SciTE «Go» [F5], упомянутую в Humble Little Ruby Book мистера Нейборли, следующим образом:

Обходной путь 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.)

person Tamara    schedule 19.12.2013