haskell - haskell if-then-else 中递归调用 main 时执行多条语句

标签 haskell

这是我的代码

main :: IO ()  
main = do
    putStr "Enter user name: " 
    userName <- getLine
    putStr "Enter filename: " 
    fileName <- getLine
    contents <- readFile fileName
    --------SOME CODES HERE------------------
    putStrLn ("TITLES AND RATINGS OF FILMS BY " ++ userName)
    -----------SOME CODES HERE-----------------
    putStr "ENTER 'Y' TO SAVE CHANGES AND EXIT: "
    ex <- getChar
    if ex /= 'Y' then
       main     
    else do 
        writeFile fileName (show film')
        exitWith ExitSuccess 

当我输入除“Y”之外的任何值时,我得到:

输入用户名:输入文件名:_

而不仅仅是

输入用户名:_

有人知道为什么会发生这种情况吗?

最佳答案

getChar 仅读取单个字符。但是您按下了 Enter 键,因此您还输入了一个换行符,然后当您递归调用 main 时,第一个 getLine 会读取该换行符。

只需使用 getLine 而不是 getChar 并检查它是否为 /= "Y"

关于haskell - haskell if-then-else 中递归调用 main 时执行多条语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375326/

相关文章:

haskell - 跨多个字段的验证

haskell - 如何在 Proxy 上进行模式匹配?

haskell - 我可以在 Haskell 中打印多态函数的类型,就像我将一个具体类型的实体传递给它一样吗?

haskell - 如何为用户定义的类型实现 Eq 类型类?

haskell - Haskell 中的分组表达式是什么?

haskell - 为什么它使用 Double 而不是给我一个歧义错误?

haskell - 如何编写一个以Y组合子为不动点的函数?

list - 有没有办法在递归时将列表的长度保存在变量中?

haskell - 如何从 package.yml 生成 .cabal 文件

haskell - Haskell 中 Nothing 的类型是什么?