我在f#交互式窗口中玩耍,發現printf沒有按預期工作。在下面的代碼片段中,ReadLine在第一次打印之前執行。如果我將printf更改爲Console.WriteLine,它將按預期工作。F#:printf vs Console.WriteLine
let run() =
Console.Out.WriteLine "What is your name?"
Console.Out.Flush()
let value = System.Console.ReadLine()
printf "Hello, %s, nice to meet you!" value
run()
printf是怎麼回事?有沒有flush
電話我可以讓它在readline之前打印?是否有我應該使用的f#readline?
----------------- [編輯] --------------------
讀取後費奧多爾Soikin的答案,我嘗試以下驗證。果然,屏幕上打印的是Hello
,我輸入了一些內容後,打印出World
。
open System
let run() =
printf "Hello\n World"
let value = System.Console.ReadLine()
let msg = sprintf "Hello, %s, nice to meet you!" value
printf "%s" msg
run()
'WriteLine'等效於'printfn',而不是'printf'。也許你的控制檯在接收到換行符之前不會呈現文本? –
的確,@FyodorSoikin是正確的:如果將'printf'改爲'printfn','run'函數就像你期望的那樣工作。在任何情況下,您都可以省去「忽略」功能,並且不需要刷新控制檯。 –
是的。我也證實了這一點。我也證實它與'Console.Write'和'Console.Writeline'一致。這隻會引發問題,爲什麼'Console.Write'不能按預期寫入輸出?我甚至沖洗了緩衝區。 –