如何从 stdin 读取 int 但之前打印文本?

How to read int from stdin but print text before?

我需要要求用户输入一个整数并将其保存在一个变量中。我可以用 read_int 来做到这一点,但在用户输入我要求他输入的所有内容之前,我无法显示任何内容。让我解释一下:

open Format


let ask_for_int name = 
    printf "%s?\n" name;
    let inp = read_int () in 
    printf "You have entered %d\n" inp; inp
;;


let () = printf "Hello World!\n"; 
    let myVar = ask_for_int "myVar" and myVar2 = ask_for_int "myVar2" in
    if myVar = 5 && myVar2 = 10 then printf "Ok\n" else printf "Wrong\n";;

我希望这个程序输出这样的东西:

Hello World!
myVar? 5
You have entered 5
myVar2? 10
You have entered 10
Ok

但现在,我唯一得到的是

5
10
Hello World!
myVar?
You have entered 5
myVar2?
You have entered 10
Ok

并且只要用户没有输入所有内容,屏幕上就不会显示任何内容。有谁知道如何做我正在寻找的东西?

谢谢

您的部分输出正在缓冲(因此稍后才会显示)。如果将第一个 printf 更改为:

,您应该会得到想要的结果
printf "%s? %!" name

%! 说明符要求在此时刷新输出缓冲区。

要查看其他字符串,您还需要在后面的点刷新。

但是,我想知道您为什么要使用 Format 模块中的函数。除非您的项目对输出格式有复杂的要求,否则您最好使用更简单的 Printf 模块。由于您只是使用 printf,代码将是相同的。但是 Printf 模块试图与其缓冲进行更多交互。如果您将 open Format 更改为 open Printf,您的代码几乎无需任何更改(或者至少对我而言是这样)。您可能仍想将 "%s?\n" 更改为 "%s? "