2017-02-27 57 views
3

我是Haskell的新手,我無法弄清楚如何在代碼執行期間接受來自用戶的輸入。說我鍵入此代碼:Haskell - 在運行時輸入

import System.IO 

main = do 
    putStrLn "Hi, what's your name?" 
    name <- getLine 
    putStrLn ("Hi " ++ name) 

嗯,我希望文字"Hi, what's your name?"露面我在名字前輸入,然後打印第二行"Hi, name"用戶鍵入他們的名字後。 但是,因爲它是現在,沒有任何文字顯示,直到我鍵入我的名字。這使得問題變得多餘,因爲問題在用戶回答之前不會呈現給用戶。

我知道這可能是一個不好的問題,但我一直在搜索它很長一段時間沒有成功。謝謝你的時間。

+0

您的代碼工作完全正常的我。也許你錯用了它。你打電話過得怎麼樣? – Rainbacon

+3

你確定你使用'putStrLn'就像上面的代碼,而不是'putStr'?這聽起來像是一個緩衝問題。 – chi

回答

5

這可能是由於系統上的默認緩衝。嘗試明確設置緩衝模式使用hSetBuffering到行緩衝:

main = do 
    hSetBuffering stdout LineBuffering 
    hSetBuffering stdin LineBuffering 
    putStrLn "Hi, what's your name?" 
    name <- getLine 
    putStrLn ("Hi " ++ name) 
+1

當stdout連接到終端時,AFAIK行緩衝應該是所有理智實現中的默認行爲。如果這樣做,我仍然會在其他地方尋找根本原因。 – user2847643

+0

這個修復了,謝謝。和@ user2847643,我會研究它。 – Greg