这是我的代码
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/