2014-07-19 51 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專家能夠提供更多的見解。