2011-12-20 36 views
1

this question中,建議使用Console.in.read.toChar。它工作正常,在REPL,但未能當我把它變成一個腳本工作(需要用戶按Enter鍵):從用戶讀取輸入,一次一個字符(在腳本或編譯的應用程序中)?

#!/usr/bin/scala 
!# 

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

所以,當我輸入一個字符,然後按Enter,我得到

Got a 
Got 

我在Ubuntu 11.04的gnome-terminal上使用Scala 2.9.0.1。

我在做什麼錯?

+0

看看Console.in的文檔,看看如何改變緩衝。 – dave4420 2011-12-20 08:55:39

+0

@ dave4420 - 我應該在哪裏看待更改緩衝? BufferedReader似乎沒有這個方法。 – Rogach 2011-12-20 09:14:45

+0

不知道:-(我是斯卡拉自己的初學者,但是這個問題在很多不同的語言中都會一次又一次地出現,並且通常是與緩衝有關的。 – dave4420 2011-12-20 09:58:19

回答

3

看看給予類似問題here的答案。

問題是Java中的控制檯,因此Scala處於緩衝模式,需要處於原始模式才能返回單個字符而不是行。

切換到原始模式是特定於平臺的問題,我猜爲什麼它不直接被Java支持。我假設REPL以某種方式設置了原始模式。

-5

從用戶讀取輸入,每次一個字符(在腳本或編譯的應用程序中)? 回覆

<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 2011-12-20 17:38:46

+0

這是糾正dave4420它不是Java,最新需要的是一個客戶端程序來做到這一點,如Javascript。 – jim 2011-12-21 03:51:14

相關問題