控制台输入给出虚假值

时间:2012-06-18 11:05:45

标签: f# f#-interactive

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

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

在互动上尝试过,但结果仍然是错误的。有什么解决方案吗?

2 个答案:

答案 0 :(得分: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)或将其更改为选项或其他内容。

答案 1 :(得分:8)

System.Console.Read()返回int,因此nBlock包含输入字符“5”的int表示形式,即53.您可以将其转换回char使用Convert.ToChar。由于每个字符都是单独返回的,因此您需要将其包装到循环中以处理整个输入,如in this article所述。

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