Я пишу программу на Ruby, но у меня возникают проблемы с получением информации из командной строки с помощью текстового редактора sciTE. Например, когда я пытаюсь запустить код, который требует ввода от пользователя (например, вводит «Пожалуйста, введите ваше имя:» name = gets()), появляется всплывающая командная строка, но информация, которую я «выводил» на экран, не работает. не показывать. При попытке ввести информацию (буквы или цифры) ничего не происходит. Затем я закрываю командную строку и получаю код ошибки в окне вывода sciTE. Есть предположения? Спасибо!
Проблемы с выводом и вводом информации в командную строку с помощью Ruby sciTE
Ответы (1)
Сегодня я столкнулся с этой проблемой, просматривая учебник Mr. Neighborly Ruby, и нашел ответ. Это известная проблема с SciTE и тем, как она взаимодействует со стандартным вводом (gets()
) в Windows.
Чтобы запустить код учебника как есть, используйте командную строку для запуска вашей программы, а не клавишу SciTE «Go» [F5], упомянутую в Humble Little Ruby Book мистера Нейборли, следующим образом:
Обходной путь 1:
- Ваша установка Windows Ruby должна включать ярлык (в меню «Пуск») под названием «Запустить командную строку с Ruby». Запустите это.
- В командной строке Ruby перейдите к пути, по которому находится ваш файл Hello World Ruby.
- Введите
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.)