当在haskell if-then-else中递归调用main时,将执行多个语句

时间:2014-03-13 10:14:51

标签: 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'输入任何值时,我得到:

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

而不仅仅是

输入用户名:_

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

getChar只能读取一个字符。但是你按了回车键,所以你也输入了一个换行符,当你递归调用getLine时,它会被第一个main读取。

只需使用getLine代替getChar,并检查它是/= "Y"