use*_*145 0 haskell haskell-platform
假设用户输入= 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
Run Code Online (Sandbox Code Playgroud)
你的代码有很多问题.
最好查看您正在使用的函数类型,然后组合它们.
从我可以推断出你想要的东西中可能修正你的代码
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
Run Code Online (Sandbox Code Playgroud)
最好使用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
Run Code Online (Sandbox Code Playgroud)