gpt4 book ai didi

F#:printf 与 Console.WriteLine

转载 作者:行者123 更新时间:2023-12-04 18:03:25 25 4
gpt4 key购买 nike

我在 f# 交互式窗口中玩耍,发现 printf 没有按预期工作。在以下代码段中,ReadLine 在第一个 printf 之前执行

let run () = 
printf "What is your name?"
Console.Out.Flush()
let value = System.Console.ReadLine()
printf "Hello, %s, nice to meet you!" value

run()

如果我将 printf 更改为 Console.WriteLine 它会按预期工作。
let run () = 
Console.Out.WriteLine "What is your name?"
Console.Out.Flush()
let value = System.Console.ReadLine()
printf "Hello, %s, nice to meet you!" value

run()

printf 是怎么回事?有没有 flush打电话我可以在readline之前打印吗?我应该使用 f# readline 吗?

- - - - - - - - - [编辑] - - - - - - - - - -

在阅读了 Fyodor Soikin 的回答后,我尝试了以下方法进行验证。果然,打印到屏幕上的是 Hello在我输入一些输入后,它打印出 World .
open System
let run () =
printf "Hello\n World"
let value = System.Console.ReadLine()
let msg = sprintf "Hello, %s, nice to meet you!" value
printf "%s" msg
run()

最佳答案

printf相当于Console.Write , 和 printfn相当于Console.WriteLine .您正在比较不等效的功能。

只需更换您的 printfprintfn ,您的示例将按预期工作。

为什么它不适用于 printfConsole.Write

这就是 FSI 的工作方式:在您的程序生成换行符之前,它不会将文本打印到输出窗口。它有一个很好的动机:如果 FSI 立即打印出文本,它可能会用它自己的一些中间信息输出来破坏你的输出。

调用Console.Flush与它无关。当您的程序在 FSI 中运行时,您实际上并不能直接访问控制台,而是通过 FSI 自己的过滤器。 FSI 确实会立即收到您的输入(即无需调用 Flush ),它只是不会立即将其打印出来(见上文)。

如果您自己运行程序,而不是在 FSI 中运行,那么您的输出将按预期呈现。

关于F#:printf 与 Console.WriteLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com