2014-07-19 52 views
2

我最近开始在Windows机器上使用OCaml,并一直在使用cygwin编译和执行我的程序。我最近不得不使用Lexing.from_channel stdin创建一个程序,该程序从stdin获取用户输入。我遇到的问题是我输入了输入,但没有任何反应。在检查了一些东西后,我发现没有迹象表明输入正在完成,所以程序只是等待更多的输入。我已经尝试ctrl-D我输入输入后没有任何反应,并且ctrl-z只显示Stopped并结束程序。另外,当我使用这些键时,cygwin经常会崩溃。有没有人有关于如何在OCaml中指示用户输入的输入结束的想法?与Cygwin问题的OCaml

+2

我没有使用过的OCaml,但 - 这是后您认为应该* *可正常工作的最低程序的好主意,但*不*,以防万一的问题是与你的代码,而不是用你如何输入输入。 (事实上​​,有人已经投票否决了你的问题,直到你这样做。) – ruakh

+1

另外,要尝试的东西:如果你重定向标准输入('your_ocaml_program ruakh

+0

当我使用一个文件时,它正常工作,它只是当我输入stdin的输入,一旦我有程序运行,即时通讯发现问题。我知道这一定是因为当我输入输入时我没有正确地指出eof,但我已经尝试了很多方法来做到这一点,而且似乎没有任何工作 –

回答

3

我个人的建议:如果你可以访问的Unix或Mac OS X,使用它们。在Windows上使用OCaml是很痛苦的,除非你得到报酬。在VMWare等虚拟Unix环境中使用OCaml是另一种选择。

目前我们已经在Windows 3种OCaml的口味:本机MS,本机的MinGW和Cygwin。详情请参阅http://caml.inria.fr/distrib/ocaml-4.01/notes/README.win32

在Windows中约OCaml中有任何问题,你首先必须清楚说明您所使用的OCaml的味道。我怀疑你使用MinGW OCaml而不是Cygwin。有了这个组合,我有你所描述的完全相同的麻烦。

  • 因为它是Windows控制台应用程序,所以在MinGW OCaml中Ctrl-D不被视为关闭stdin。
  • Ctrl-Z将在MinGW OCaml中关闭stdin,但它首先被Cygwin终端获取,然后暂停进程
  • 一旦通过Ctrl-Z“停止”,通常OCaml进程和终端会进入奇怪的状态,你必须杀死他们。 (我想离开它,而不是追踪究竟发生什么事。)
  • 如果您在命令提示符下执行你的MinGW OCaml的应用程序,你的标准输入工作正常。

如果您更喜欢Cygwin,并且您的工作不涉及销售二进制可执行文件,那么使用Cygwin OCaml是一种可行的方法。但是,在那里工作的人很少。我担心,即使在StackOverflow中,任何Cygwin OCaml特定问题都可能无法解答。

也许我的看法太过分了。我希望一些OCaml + MingW专家能够提供更多的见解。