假设用户输入= 6000且input.txt内的数字= 5000.总和将为11000.屏幕上显示的数字和存储在文件中的值将被覆盖为11000请帮助我,谢谢
import System.IO
menu :: IO ()
menu = do
handle <- openFile "input.txt" ReadMode
contents <- hGetContents handle
putStr contents
hClose handle
contents <- readFile "input.txt"
print . sum . read $ contents
putStr("\nThe amount of money that you want to deposit : ")
y<-getLine
答案 0 :(得分:5)
您的代码存在很多问题。
最好查看您正在使用的功能类型,然后组成它们。
根据我可以推断出你想要的代码,可能会纠正你的代码
import System.IO
main :: IO ()
main = do
y<-getLine
content <- readFile "input.txt"
let out = sum $ map read $ y:(words content)
putStrLn $ "\nThe amount of money that you want to deposit : " ++ show out
writeFile "input.txt" $ show out
最好使用withFile
,因为您想要阅读然后再写。 readFile
懒惰地读取文件,因此无法保证何时关闭文件句柄。在上述情况下,如果在打印输出之前编写writeFile
行,则可能会出现运行时错误,抱怨打开句柄。因此,withFile
是一个更安全的选项,您将只打开一次文件,而上述情况只打开两次。
我认为您只想在输入文件的第一行添加您输入的数字。
import System.IO
main = do
input <- getLine
out <- sumFile (read input) "input.txt"
putStr $ "\nThe amount of money that you want to deposit : " ++ show out
sumFile :: Int -> FilePath -> IO Int
sumFile input fp = withFile fp ReadWriteMode add
where
add handle = do
number <- hGetLine handle
hSeek handle AbsoluteSeek 0
let sum = input + read number
hPutStrLn handle (show sum)
return sum