2

用 5 尝试这个简单的控制台输入后,结果显示为 53

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

在交互式上尝试过,仍然得到错误的结果。请问有什么解决办法吗?

4

2 回答 2

10

您应该尝试以下方法:

printfn "Enter no. of blocks: "
let nBlock = System.Console.ReadLine() |> System.Int32.Parse
printfn "entered value is %d" nBlock

解释:

您的代码只读取一个字符 - 正如 Lee 提到的那样,您将读取一行(按回车键后结束)并将该字符串解析为 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)或将其更改为选项或其他内容。

于 2012-06-18T11:14:19.060 回答
8

System.Console.Read()返回 an int,因此nBlock包含输入字符“5”的 int 表示形式,即 53。您可以将其转换回charusing Convert.ToChar。由于每个字符都是单独返回的,因此您需要将其包装成一个循环来处理整个输入,如本文所述

更好的方法可能是使用Console.ReadLine()读取整行并将其解析为int.

于 2012-06-18T11:13:44.177 回答