2012-06-18 68 views
2

試圖用5這個簡單的控制檯輸入後,結果顯示爲53控制檯輸入給假值

printfn "Enter no. of blocks: " 
let nBlock = System.Console.Read() 
printfn "entered value is %O" nBlock 

試圖在互動,仍然得到錯誤的結果。任何解決方案?

回答

10

你應該嘗試像:

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),改變成一個選項或其他東西。

+0

謝謝,它按預期工作。 F#錯誤n00b ... – AruniRC

8
System.Console.Read()

返回int,因此nBlock包含輸入字符「5」,這是53的INT表示可以將其轉換回一個char使用Convert.ToChar到。由於每個字符都是單獨返回的,因此您需要將其包裝到一個循環中以處理整個輸入,如in this article所述。

更好的方法是使用Console.ReadLine()來讀取整行並將其解析爲int

+0

謝謝。這只是讓我錯過了比以往任何時候都更好的舊'scanf'。 : -/ – AruniRC

+0

@AruniRC有幾個很好的'sscanf'實現:[one](http://stackoverflow.com/q/2415705/974789)和[two](http://fssnip.net/4I) – bytebuster