我在这个剧本中做错了什么?
Randomize
value=int((150 * Rnd + 1) * Rnd + lowerbound)
guess+inputbox("guess the number","guess","guess here")
if guess=value then
msgbox("correct"),0+64+4096,("guess")
wscript.quit
else
if guess < value then
msgbox("too low"),0+32+4096,("guess")
once=1
end if
else
msgbox("too high"),0+32+4096,("guess")
end if
once=1
do
guess=inputbox("try again","guess","guess here")
if guess=value then
msgbox("correct"),0+64+4096,("guess")
else
if guess < value then
msgbox("too low"),0+32+4096,("guess")
end if
else
msgbox("too high"),0+32+4096,("guess")
end if
loop
如果你能弄清楚会出现什么问题会很棒。
一直在说
预期“结束”
当我按照它所说的去做时我会运行它仍然无效。
答案 0 :(得分:2)
编辑了代码以正确缩进代码,这有助于突出显示问题。该错误是因为If
语句只能有一个Else
条件,If
语句的基本结构是;
If <boolean condition> Then
<true outcome>
Else
<false outcome>
End If
目前您有多个
实例If <boolean condition> Then
<true outcome>
Else
<false outcome>
Else
<unknown condition>
End If
这是无效的语法,因为基本 If
语句只能返回True
或False
。
然而,还有ElseIf
允许指定多个布尔条件并返回不同的结果。
看起来像这样;
If <boolean condition> Then
<true outcome>
ElseIf <boolean condition> Then
<true outcome>
ElseIf <boolean condition> Then
<true outcome>
Else
<false outcome>
End If
根据您如何嵌套If
语句,可以像这样重写有问题的代码;
Randomize
value = Int((150 * Rnd + 1) * Rnd + lowerbound)
guess = InputBox("guess the number", "guess", "guess here")
If guess = value Then
Call MsgBox("correct", vbOKOnly + vbInformation + vbSystemModal, "guess")
WScript.Quit
ElseIf guess < value Then
Call MsgBox("too low", vbOKOnly + vbQuestion + vbSystemModal, "guess")
once = 1
Else
Call MsgBox("too high", vbOKOnly + vbQuestion + vbSystemModal, "guess")
End if
once = 1
Do
guess = InputBox("try again", "guess", "guess here")
If guess = value Then
Call MsgBox("correct", vbOKOnly + vbInformation + vbSystemModal, "guess")
ElseIf guess < value then
Call MsgBox("too low", vbOKOnly + vbQuestion + vbSystemModal, "guess")
Else
Call MsgBox("too high", vbOKOnly + vbQuestion + vbSystemModal, "guess")
End If
Loop
有关上述示例的注意事项
用行中的+
替换=
guess+inputbox("guess the number","guess","guess here")
因为它不会将InputBox()
的结果分配给guess
,这正是我假设您正在做的事情。如果您尝试将InputBox()
与guess
的结果连接起来仍然无法正常工作,则必须使用
guess = guess + InputBox("guess the number", "guess", "guess here")
如果是这种情况,我个人更喜欢使用&
而不是+
进行字符串连接。
MsgBox()
中的括号似乎有点奇怪,如果不将结果返回给变量,通常会在没有括号的情况下调用MsgBox()
,就像这样;
MsgBox "correct", vbOKOnly + vbInformation + vbSystemModal, "guess"
但是如果您确实想要包含括号(我喜欢这样做),您可以像这样使用Call
Call MsgBox("correct", vbOKOnly + vbInformation + vbSystemModal, "guess")
避免了可怕的
Microsoft VBScript编译错误:调用Sub
时无法使用括号
但仍然允许在没有返回值时用括号括起函数。
您可能还注意到我将MsgBox()
中的硬编码数值替换为Named Constants,这样其他人就可以更轻松地阅读和解释其含义。它们也很难用到VBScript中,所以没有理由不使用它们。
考虑一下你想要做什么,以为我可以稍微重新考虑一下代码,希望能让它像你期望的那样工作
Dim value, guess, msg, once
Randomize
value = Int((150 * Rnd + 1) * Rnd + lowerbound)
Do
If once = 0 Then
msg = "guess the number"
Else
msg = "try again"
End If
guess = CInt(InputBox(msg, "guess", "guess here"))
If guess = value Then
Call MsgBox("correct", vbOKOnly + vbInformation + vbSystemModal, "guess")
WScript.Quit
ElseIf guess < value then
Call MsgBox("too low", vbOKOnly + vbQuestion + vbSystemModal, "guess")
once = 1
Else
Call MsgBox("too high", vbOKOnly + vbQuestion + vbSystemModal, "guess")
once = 1
End If
Loop
从中获取的东西;
我们只需要循环中的一个InputBox()
来处理第一个初始猜测和随后的&#34;再次尝试&#34;尝试。这意味着我们不会再次复制相同的代码,请参阅DRY Principle。
InputBox()
返回一个字符串,所以首先代码试图将字符串值与整数值进行比较,这将给出各种奇怪的结果。通过使用CInt()
转换为整数,比较开始按预期工作。