错误预期错误“结束”

时间:2016-04-14 01:49:18

标签: vbscript

我在这个剧本中做错了什么?

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

如果你能弄清楚会出现什么问题会很棒。

一直在说

  

预期“结束”

当我按照它所说的去做时我会运行它仍然无效。

1 个答案:

答案 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语句只能返回TrueFalse

然而,还有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

有关上述示例的注意事项

  1. 用行中的+替换=

    guess+inputbox("guess the number","guess","guess here")
    

    因为它不会将InputBox()的结果分配给guess,这正是我假设您正在做的事情。如果您尝试将InputBox()guess的结果连接起来仍然无法正常工作,则必须使用

    guess = guess + InputBox("guess the number", "guess", "guess here")
    

    如果是这种情况,我个人更喜欢使用&而不是+进行字符串连接。

  2. MsgBox()中的括号似乎有点奇怪,如果不将结果返回给变量,通常会在没有括号的情况下调用MsgBox(),就像这样;

    MsgBox "correct", vbOKOnly + vbInformation + vbSystemModal, "guess"
    

    但是如果您确实想要包含括号(我喜欢这样做),您可以像这样使用Call

    Call MsgBox("correct", vbOKOnly + vbInformation + vbSystemModal, "guess")
    

    避免了可怕的

      

    Microsoft VBScript编译错误:调用Sub

    时无法使用括号

    但仍然允许在没有返回值时用括号括起函数。

  3. 您可能还注意到我将MsgBox()中的硬编码数值替换为Named Constants,这样其他人就可以更轻松地阅读和解释其含义。它们也很难用到VBScript中,所以没有理由不使用它们。

  4. 考虑一下你想要做什么,以为我可以稍微重新考虑一下代码,希望能让它像你期望的那样工作

    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
    

    从中获取的东西;

    1. 我们只需要循环中的一个InputBox()来处理第一个初始猜测和随后的&#34;再次尝试&#34;尝试。这意味着我们不会再次复制相同的代码,请参阅DRY Principle

    2. InputBox()返回一个字符串,所以首先代码试图将字符串值与整数值进行比较,这将给出各种奇怪的结果。通过使用CInt()转换为整数,比较开始按预期工作。