控制台输入给出虚假值

Aru*_*iRC 2 f# f#-interactive

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

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

试图在互动上,仍然得到错误的结果.有解决方案吗?

Car*_*ten 10

你应该尝试类似的东西:

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

说明:

你的代码只读取一个字符 - 正如李提到的那样,你将读取一行(按返回后结束)并将该字符串解析为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
Run Code Online (Sandbox Code Playgroud)

当然,您必须检查错误情况(-1)或将其更改为选项或其他内容.


Lee*_*Lee 8

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

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