F# 提供虚假值的控制台输入
使用5尝试这个简单的控制台输入后,结果显示为53F# 提供虚假值的控制台输入,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。由于每个
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
实现:和