我试图比较两种打印乘法表的方法,即使它们打印相同的字符串,当我打印"%s" mulTable n和printf"%s" loopMulTable n,它们在比较它们时看起来不一样,因为它在最后一个函数中为每个比较打印错误。任何人都可以向我解释原因吗?
let a = " 1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 12 14 16 18 20
3 3 6 9 12 15 18 21 24 27 30
4 4 8 12 16 20 24 28 32 36 40
5 5 10 15 20 25 30 35 40 45 50
6 6 12 18 24 30 36 42 48 54 60
7 7 14 21 28 35 42 49 56 63 70
8 8 16 24 32 40 48 56 64 72 80
9 9 18 27 36 45 54 63 72 81 90
10 10 20 30 40 50 60 70 80 90 100"
let mulTable n =
a.[0..(n*54)+51]
let loopMulTable n =
let mutable returnString = ""
returnString <- returnString + (sprintf " ")
for i in 1..10 do
returnString <- returnString + (sprintf "%5d" i)
for x in 1..n do
returnString <- returnString + (sprintf "\n")
returnString <- returnString + (sprintf "%2d" x)
for y in 1..10 do
returnString <- returnString + (sprintf "%5d" (x*y))
returnString
let o = "n:"
let u = "boolean value:"
let chooseN n =
printfn "%5s %19s" o u
for n in 1..n do
printfn "%4d %15b" n ((loopMulTable n)=(mulTable n))
chooseN 5
我可以补充一点,我是编程的初学者,尤其是F#的初学者,所以可能还有其他瑕疵,尽管他们并不是我想要解决的问题。
谢谢!
答案 0 :(得分:3)
对于相等性的测试很可能是失败的,因为这一行是追加换行而不是回车换行组合。
returnString <- returnString + (sprintf "\n")
如果您使用的是Windows计算机,则源代码中的换行符很可能包含回车符。将其更改为以下内容,它应该比较好:
returnString <- returnString + (sprintf "\r\n")