試圖用5這個簡單的控制檯輸入後,結果顯示爲53控制檯輸入給假值
printfn "Enter no. of blocks: "
let nBlock = System.Console.Read()
printfn "entered value is %O" nBlock
試圖在互動,仍然得到錯誤的結果。任何解決方案?
試圖用5這個簡單的控制檯輸入後,結果顯示爲53控制檯輸入給假值
printfn "Enter no. of blocks: "
let nBlock = System.Console.Read()
printfn "entered value is %O" nBlock
試圖在互動,仍然得到錯誤的結果。任何解決方案?
你應該嘗試像:
printfn "Enter no. of blocks: "
let nBlock = System.Console.ReadLine() |> System.Int32.Parse
printfn "entered value is %d" nBlock
說明:
你的代碼只讀取一個字 - 李提到 有了這個,你會讀一本線(按返回後結束)和解析將該字符串轉換爲int。
備註:也許你會要檢查一個數字,你可以用的TryParse做到這一點:
printfn "Enter no. of blocks: "
let nBlock =
match System.Console.ReadLine() |> System.Int32.TryParse with
| true, n -> n
| false, _ -> -1
printfn "entered value is %d" nBlock
當然,你將不得不檢查錯誤的情況下(-1),改變成一個選項或其他東西。
System.Console.Read()
返回int
,因此nBlock
包含輸入字符「5」,這是53的INT表示可以將其轉換回一個char
使用Convert.ToChar
到。由於每個字符都是單獨返回的,因此您需要將其包裝到一個循環中以處理整個輸入,如in this article所述。
更好的方法是使用Console.ReadLine()
來讀取整行並將其解析爲int
。
謝謝。這只是讓我錯過了比以往任何時候都更好的舊'scanf'。 : -/ – AruniRC
@AruniRC有幾個很好的'sscanf'實現:[one](http://stackoverflow.com/q/2415705/974789)和[two](http://fssnip.net/4I) – bytebuster
謝謝,它按預期工作。 F#錯誤n00b ... – AruniRC