如何从 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? "
。
我需要要求用户输入一个整数并将其保存在一个变量中。我可以用 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? "
。