Ocaml 找到3个数字的中间

Ocaml 找到3个数字的中间,ocaml,Ocaml,所以我很难找到3个数字之间的中间数字。我写了一个代码,但是我收到了一条消息,异常:失败,字符串的整数。你知道为什么吗 let minimum a b c = min a (min b c) let maximum a b c = max a (max b c) let middle a b c =if a > (minimum a b c) && a < (maximum a b c) then Printf.printf "The middle is %d"

所以我很难找到3个数字之间的中间数字。我写了一个代码,但是我收到了一条消息,异常:失败,字符串的整数。你知道为什么吗

 let minimum a b c = min a (min b c)
 let maximum a b c = max a (max b c)
 let middle a b c =if a > (minimum a b c) && a < (maximum a b c) then Printf.printf "The middle is %d" a;
                    if b > (minimum a b c) && b < (maximum a b c) then Printf.printf "The middle is %d" b;
                    if c > (minimum a b c) && c < (maximum a b c) then Printf.printf "The middle is %d" c
let () = print_string "Enter x: "
let x = read_int ()
let () = print_string "Enter y: "
let y = read_int ()
let () = print_string "Enter z: "
let z = read_int ()
let mid = middle x y z;;
让最小AB c=最小a(最小b c)
设最大a b c=最大a(最大b c)
让中间a b c=如果a>(最小a b c)和&a<(最大a b c),则Printf.Printf“中间是%d”a;
如果b>最小a b c)和&b<(最大a b c),则Printf.Printf“中间是%d”b;
如果c>(最小AB c)和&c<(最大AB c),则Printf.Printf“中间是%d”c
让()=打印字符串“输入x:
设x=read_int()
让()=打印字符串“输入y:”
设y=read_int()
让()=打印字符串“输入z:”
设z=read_int()
设mid=middle x y z;;
当我运行它时,我得到以下信息:

let minimum a b c = min a (min b c)
let maximum a b c = max a (max b c)
let mediana a b c = if a > (minimum a b c) && a < (maximum a b c) then Printf.printf "The middle is %d" a;
                      if b > (minimum a b c) && b < (maximum a b c) then Printf.printf "The middle is %d" b;
                      if c > (minimum a b c) && c < (maximum a b c) then Printf.printf "The middle is %d" c
  let () = print_string "Enter x: "
  let x = read_int ()
  let () = print_string "Enter y: "
  let y = read_int ()
  let () = print_string "Enter z: "
  let z = read_int ()
  let mid = middle x y z;;
Enter x:
Exception: Failure "int_of_string".
#
让最小AB c=最小a(最小b c)
设最大a b c=最大a(最大b c)
让mediana a b c=如果a>(最小a b c)和&a<(最大a b c),则Printf.Printf“中间是%d”a;
如果b>最小a b c)和&b<(最大a b c),则Printf.Printf“中间是%d”b;
如果c>(最小AB c)和&c<(最大AB c),则Printf.Printf“中间是%d”c
让()=打印字符串“输入x:
设x=read_int()
让()=打印字符串“输入y:”
设y=read_int()
让()=打印字符串“输入z:”
设z=read_int()
设mid=middle x y z;;
输入x:
异常:失败“int\u of_string”。
#

如果我使用
ocaml
utop
命令从Linux shell启动一个新的解释器,然后将您的第一个代码复制/粘贴到解释器中,输入数字就不会有问题


但是,如果代码中的
后面有一个空行,那么
ocaml
解释器会将其视为
x
的输入,并直接抱怨这一空行无法转换为数字,从而导致您描述的症状。因此,我建议您小心不要复制额外的代码美国字符(尤其是换行符)当输入解释器或切换到解释器时,它不会表现出这种行为,并且是一个更好的顶层,具有命令历史记录和自动完成等优点。

如果我使用
ocaml
utop
命令从Linux shell启动一个新的解释器,然后将您的第一个代码复制/粘贴到其中,我会输入号码没问题


但是,如果代码中的
后面有一个空行,那么
ocaml
解释器会将其视为
x
的输入,并直接抱怨这一空行无法转换为数字,从而导致您描述的症状。因此,我建议您小心不要复制额外的代码美国字符(尤其是换行符)当输入解释器或切换到解释器时,解释器不会表现出这种行为,并且是一个更好的顶层,具有命令历史记录和自动完成等优点。

我们需要更多的上下文。首先,您没有向我们显示您编写的确切代码。特别是,您定义了
最小值
,但使用
最小值
(类似地,
maxim
)。此外,您没有告诉我们为3
read_int
调用提供什么输入。异常表明OCaml无法将这些输入转换为整数,但如果我输入例如
12
34
56
,每个输入后面都有一个返回(与
12 34 56
Enter)相反,一切正常。请注意,如果至少两个数字相等,则
middle
不会输出任何内容。我编辑了最小/最大部分。你知道如何使代码正常工作吗?@OvyOvy“正常工作”是什么意思"?当你给它提供无效输入时,它应该怎么做?你说的无效输入是什么意思?我希望它在运行时不会出现错误。@OvyOvy阅读了我第一条评论的最后部分:你描述的问题可能不在于程序本身,而在于你给它的输入。因为你没有给我们提供所说的输入,所以我们很难做到这一点o提出一个充分的答案。一个假设(在我的评论中再次提到)你用空格来分隔数字,而不是返回。但是有无限多的交互输入会产生错误。这就是为什么你必须向我们提供你给出的准确输入。只有这样才能提供准确的答案。我们需要更多的上下文。首先,你没有向我们展示exact您已经编写的代码。特别是,您定义了
最小值
,但使用了
最小值
(类似地
最大值
)。此外,您没有告诉我们为3
read_int
调用提供了什么输入。异常表明OCaml无法将这些输入转换为整数,但如果我输入例如
12
34
56
,每个输入后面都有一个返回(与
12 34
enter相反),一切正常。请注意,如果至少两个数字相等,
middle
将不会输出任何内容。我编辑了最小/最大部分。您知道如何使代码正常工作吗?@OvyOvy“正常工作”是什么意思?当你给它提供无效输入时,它应该怎么做?你说的无效输入是什么意思?我希望它在运行时不会出现错误。@OvyOvy阅读了我第一条评论的最后部分:你描述的问题可能不在于程序本身,而在于你给它的输入。因为你没有给我们提供所说的输入,所以我们很难做到这一点o给出一个充分的答案。一个假设(在我的评论中再次提到)是你用空格而不是返回来分隔数字。但是有无限多的交互输入会产生错误。这就是为什么你必须向我们提供你给出的准确输入。只有这样才有可能