gpt4 book ai didi

Haskell:基础阅读 Int

转载 作者:行者123 更新时间:2023-12-02 12:29:51 25 4
gpt4 key购买 nike

目标是用 Haskell 编写 Nim 游戏作为学校作业。我是 Haskell 新手,当我尝试读取输入时会出现奇怪的行为。

目标是读取两个整数。它不是打印第一条消息,然后提示,然后继续第二条消息,而是只打印两条消息,而我无法提供正确的输入。这里出了什么问题?

type Board = [Int]      -- The board
type Heap = Int -- id of heap
type Turn = (Int, Int) -- heap and number of stars to remove

readInt :: String -> IO Int
readInt msg = do putStr (msg ++ "> ")
inp <- getChar
let x = ord inp
return x

readTurn :: Board -> IO(Turn)
readTurn b = do heap <- readInt "Select heap:"
amt <- readInt "Select stars:"
print heap
print amt
return(heap, amt)

最佳答案

问题是 stdout 默认情况下是行缓冲的,这意味着在打印换行符之前不会输出任何内容。有两种方法可以解决这个问题:

  1. 在打印提示后使用 hFlush stdout 刷新缓冲区。
  2. 在程序开始时使用 hSetBuffering stdout NoBuffering 来禁用输出缓冲。

此外,使用 getCharord 将读取单个字符并给出其 ASCII 值,这可能不是您想要的。要读取和解析数字,请使用 readLn:

import System.IO (hFlush, stdout)

readInt :: String -> IO Int
readInt msg = do
putStr (msg ++ "> ")
hFlush stdout
readLn

关于Haskell:基础阅读 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124419/

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