如何在一行上打印输出?
今天我正在研究这段代码,它输出一系列“数组”的平均值,数据以这种格式输入:
3 #Number of arrays to get the average from
2 3 0 #First array
4 5 0 #Second array
1 4 5 0 #Third array
我编写了一个输出数据的代码,但意识到它会像这样打印它:
2 #Average (Int) of the 1st array
4 #Average (Int) of the 2nd array
3 #Average (Int) of the 3rd array
(考虑到计算平均值时不使用每个数组末尾的0,它仅用于指示数组末尾)
我的问题是,如何正确更改代码以便可以像这样输出数据?:
2 4 3
这是我一直在使用的代码:
sumList :: [Int] -> Int sumList [] = 0 sumList (u:v) = u + sumList v
funavg :: Int -> IO () funavg numitint = if numitint==0 then return ()
else do
arrs <- getLine
let arrnum = (map read(words arrs) :: [Int])
let total = sumList arrnum
let avg = div total ((length arrnum)-1)
print avg
funavg (numitint - 1)
main :: Prelude.IO () main = do
numits <- getLine
let numitint = read numits :: Int
funavg numitint
我搜索了许多文档和网站,但找不到理想的答案。使用递归是强制性的。
任何帮助都非常感谢:D
回答
print等价于putStrLn . show并且为了方便打印任何Show类型的单个值而提供。
print没有省略换行符的标准库伴侣,但putStrLn有:它被称为putStr. 而不是print avg,考虑
putStr $ show avg