F# 提供虚假值的控制台输入

F# 提供虚假值的控制台输入,f#,f#-interactive,F#,F# Interactive,使用5尝试这个简单的控制台输入后,结果显示为53 printfn "Enter no. of blocks: " let nBlock = System.Console.Read() printfn "entered value is %O" nBlock 在互动上尝试过,但仍然得到错误的结果。有什么解决方案吗?System.Console.Read()返回一个int,因此nBlock包含输入字符“5”的int表示形式,即53。您可以使用convert.ToChar将其转换回char。由于每个

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

printfn "Enter no. of blocks: "
let nBlock = System.Console.Read()
printfn "entered value is %O" nBlock
在互动上尝试过,但仍然得到错误的结果。有什么解决方案吗?

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


更好的方法可能是使用
Console.ReadLine()
读取整行内容,然后将其解析为
int
您应该尝试以下操作:

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

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

谢谢。这让我比以往任何时候都更怀念好的
scanf
-/@AruniRC有几个很好的
sscanf
实现:和