错误与预期的错误“结束”

ye_olde_troller

我在此脚本中做错了什么?

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

如果您能找出问题所在,那就太好了。

一直在说

预期的“结束”

当我按照它说的去做时,我会运行它,但它仍然无法正常工作。

用户名

已编辑代码以正确缩进,这应有助于突出显示该问题。错误是因为一条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()命名常量是给别人看的,并解释其含义更容易。它们也被硬化到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

从中得到的东西;

  1. 我们只需要InputBox()循环中的一个即可处理第一次的初始猜测和随后的“重试”尝试。这意味着我们不再重复复制同一段代码,请参阅DRY Principle

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

<名称> 预期接近“结束”错误

来自分类Dev

VHDL分析错误,意外的GENERIC,预期结束

来自分类Dev

Visio VBA“预期:语句结束”错误

来自分类Dev

合并文件给出错误:文件结束,预期行

来自分类Dev

错误:输入结束时预期的声明或声明atmel studio

来自分类Dev

语法错误:意外的keyword_ensure,预期输入结束

来自分类Dev

预期:语句结束错误——编写易失性公式

来自分类Dev

如何在输入结束时修复预期的} 错误

来自分类Dev

错误: ';' 预期的

来自分类Dev

rails格式错误:语法错误,意外的keyword_ensure,预期输入结束

来自分类Dev

Rails Controller错误:语法错误,意外的keyword_end,预期输入结束

来自分类Dev

找不到错误...语法错误,意外的keyword_ensure,预期输入结束

来自分类Dev

Ruby On Rails收到错误:语法错误,意外的keyword_ensure,预期输入结束

来自分类Dev

VBA:语句结束错误

来自分类Dev

VBS错误结束要求

来自分类Dev

本地结束变量错误

来自分类Dev

在结束错误后写入

来自分类Dev

NSURLConnection 以错误结束 - 1001

来自分类Dev

AnsibleError:模板字符串时发生模板错误:预期标记“打印语句结束”,得到了“ {”

来自分类Dev

错误:输入井字游戏结束时的预期声明或声明

来自分类Dev

VBA错误:预期结束子。合并公共子和子的Outlook

来自分类Dev

预期的结束子和控制变量已在使用错误

来自分类Dev

Active Directory VBS 搜索脚本的第 1 行中出现“预期语句结束”错误

来自分类Dev

BASIC错误:预期为'='

来自分类Dev

尝试/捕获预期的'('错误

来自分类Dev

BuildConfig失败错误';' 预期的

来自分类Dev

“预期缩进的块”错误?

来自分类Dev

错误:预期为“)”?

来自分类Dev

错误:预期的主要表达

Related 相关文章

  1. 1

    <名称> 预期接近“结束”错误

  2. 2

    VHDL分析错误,意外的GENERIC,预期结束

  3. 3

    Visio VBA“预期:语句结束”错误

  4. 4

    合并文件给出错误:文件结束,预期行

  5. 5

    错误:输入结束时预期的声明或声明atmel studio

  6. 6

    语法错误:意外的keyword_ensure,预期输入结束

  7. 7

    预期:语句结束错误——编写易失性公式

  8. 8

    如何在输入结束时修复预期的} 错误

  9. 9

    错误: ';' 预期的

  10. 10

    rails格式错误:语法错误,意外的keyword_ensure,预期输入结束

  11. 11

    Rails Controller错误:语法错误,意外的keyword_end,预期输入结束

  12. 12

    找不到错误...语法错误,意外的keyword_ensure,预期输入结束

  13. 13

    Ruby On Rails收到错误:语法错误,意外的keyword_ensure,预期输入结束

  14. 14

    VBA:语句结束错误

  15. 15

    VBS错误结束要求

  16. 16

    本地结束变量错误

  17. 17

    在结束错误后写入

  18. 18

    NSURLConnection 以错误结束 - 1001

  19. 19

    AnsibleError:模板字符串时发生模板错误:预期标记“打印语句结束”,得到了“ {”

  20. 20

    错误:输入井字游戏结束时的预期声明或声明

  21. 21

    VBA错误:预期结束子。合并公共子和子的Outlook

  22. 22

    预期的结束子和控制变量已在使用错误

  23. 23

    Active Directory VBS 搜索脚本的第 1 行中出现“预期语句结束”错误

  24. 24

    BASIC错误:预期为'='

  25. 25

    尝试/捕获预期的'('错误

  26. 26

    BuildConfig失败错误';' 预期的

  27. 27

    “预期缩进的块”错误?

  28. 28

    错误:预期为“)”?

  29. 29

    错误:预期的主要表达

热门标签

归档