Чтение ввода от пользователя, по одному символу за раз (в скрипте или скомпилированном приложении)? - PullRequest
1 голос
/ 20 декабря 2011

В этот вопрос , было предложено использовать Console.in.read.toChar. Он отлично работает в REPL, но не работает, когда я помещаю его в скрипт (требуется, чтобы пользователь нажал Enter):

#!/usr/bin/scala
!#

while (true) {
  val c = Console.in.read.toChar
  println("Got " + c)
}

Поэтому, когда я набираю char и нажимаю Enter, я получаю

Got a
Got

Я использую Scala 2.9.0.1, на Ubuntu 11.04, в gnome-терминал.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Взгляните на ответы на аналогичный вопрос здесь .

Проблема заключается в том, что консоль в Java и, следовательно, Scala находятся в режиме буферизации и должны быть в необработанном режиме, чтобы возвращать отдельные символы вместо строк.

Переключение в необработанный режим - это проблема, специфичная для платформы, которая, я думаю, почему она не поддерживается Java напрямую. Я предполагаю, что REPL каким-то образом установил необработанный режим.

0 голосов
/ 20 декабря 2011

Чтение ввода от пользователя, по одному символу за раз (в скрипте или скомпилированном приложении)?Ответить

<input type='text' id='userinfo' />
<br />
<br />
<p id="output" style="color:red; font-size:3em" >  </p>

<script type="text/javascript">
    document.getElementById("userinfo").onkeyup = function (){
        document.getElementById("output").innerHTML = this.value;
    }
</script>
...