2011-12-20 8 views
1

this questionには、Console.in.read.toCharを使用することが推奨されました。それはREPLで正常に動作しますが、私は、スクリプトにそれを置くときに動作しない(Enterキーを押すようにユーザーに要求する):ユーザからの入力を1度に読み取る(スクリプトまたはコンパイルされたアプリで)?

#!/usr/bin/scala 
!# 

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

を私は文字を入力してEnterキーを押したときにそう、私が取得

Got a 
Got 

私はgnome-terminalのUbuntu 11.04でScala 2.9.0.1を使用しています。

私は間違っていますか?

+0

Console.inのドキュメントを見て、バッファリングを変更する方法を見てください。 – dave4420

+0

@ dave4420 - バッファリングを変更する場所はどこですか? BufferedReaderにはこのためのメソッドがないようです。 – Rogach

+0

いいえアイデア:-(私はScalaの初心者ですが、この問題はさまざまな言語で何度も繰り返され、通常はバッファリングと関係します。 – dave4420

答えて

3

同様の質問hereに与えられた回答を見てください。

Javaのコンソール、したがってScalaはバッファモードであり、行ではなく個々の文字を返すためにはrawモードでなければならないという問題があります。

rawモードへの切り替えは、プラットフォーム固有の問題です。なぜなら、Javaで直接サポートされていない理由です。私はREPLが何らかの形で生モードを設定したと仮定します。

-5

一度に1文字ずつ入力する(スクリプトまたはコンパイルされたアプリケーションで) 返信

<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> 
+3

JavascriptはJavaではなく、確かにScalaではありません。 – dave4420

+0

それは正しいdave4420そのJavaではない、何が必要なのは、Javascriptのようにこれを行うクライアント側のプログラムです。 – jim

関連する問題