所以我试着做一些简单的事情:
printfn "Enter a number:"
try
let x = System.Console.ReadLine();
Some(int32(x))
with
| :? System.FormatException -> printfn "Invalid number!"
Some(0)我想打印消息,然后让用户输入一个数字,并尝试将其转换为int并返回它。
如果我只是编译代码(通过在命令行上输入fsc a3.fs ),它就能正常工作。它暂停,等待输入,然后返回一些(Int)。
如果我在命令行上将代码复制并粘贴到FSI中,它会工作得很好。
但当我在visual studio中运行FSI (高亮显示+ alt+enter)中的代码时,它只是直接经过输入部分,然后抛出(并捕获)异常。
下面是我在FSI (在visual studio中)中运行时的输出:
Enter a number:
Invalid number!
0正如你所看到的,它实际上不会暂停并等待我输入。
有人知道怎么做吗?
谢谢!
发布于 2011-11-06 05:11:18
Visual Studio中的F#交互控制台不支持读取输入,因此无法从控制台请求输入。如果您以交互方式运行代码,则始终可以在编辑器中输入输入,因此最好的解决方法是在运行代码之前输入输入的开头绑定let。您可以使用#if来支持这两种场景:
#if INTERACTIVE
// TODO: Enter input here when running in F# Interactive
let input = "42"
#endif
try
#if INTERACTIVE
Some(int32 input)
#else
let x = System.Console.ReadLine();
Some(int32(x))
#endif
with
| :? System.FormatException ->
printfn "Invalid number!"
Some(0) 发布于 2011-11-06 05:44:43
如果您将F# interactive作为自己的进程打开(通过直接运行fsi.exe,代码就可以正常工作--下面是我的遭遇:
> printfn "Enter a number:"
- let r =
- try
- let x = System.Console.ReadLine();
- Some(int32(x))
- with
- | :? System.FormatException -> printfn "Invalid number!"
- Some(0)
- ;;
Enter a number:
5
val r : int32 option = Some 5发布于 2017-11-27 20:50:07
试试下面,它在我的机器上运行良好(VS 2013,F# 3.1 12.0.21005.1)
let inputTest i =
printfn "iter - %d" i
let input = System.Console.ReadLine()
printfn "%s" input
System.Console.ReadLine() |> ignore
List.iter inputTest [1..3]https://stackoverflow.com/questions/8022512
复制相似问题