在下面的程序中,r被初始化为舍入的随机数,并提示用户猜测。如果用户猜对了,则有一个提示,否则会有另一个提示。代码看起来正确,但在运行时,选择Else案例是否用户得到了正确的数字。请帮助我多次阅读它以免疼。
Set WshShell = WScript.CreateObject("WScript.Shell")
'This script is designed to create a random number, and have a user guess the number
'If the user guesses the number incorrectly, negatively impact the users system
'if the user guess the number correctly, do nothing
dim InputValue
dim UserInput
'create a random number
dim r
randomize
r = int(rnd * 10)+1
'Allow the user to guess what number is correct
Input = inputbox ("Choose a number from one to ten, and choose wisely ;)", "Type a number.")
InputValue = Input
'Provide the user with feedback as to what his/her choice was and what the number actually was.
UserInput = "You typed " & InputValue & "." & " The number was " & r & "."
'echo the random generated number for test purposes
WScript.Echo r
Select Case InputValue
Case r
WScript.Echo "No action"
Case Else
WScript.Echo "Negative Action"
End Select
答案 0 :(得分:3)
问题是InputValue
是String
类型,因为InputBox
函数和r
返回的内容是Integer
1}},因此当您将InputValue
与r
进行比较时,您需要将字符串与整数进行比较,即将苹果与橙子进行比较。
概念证明:
Dim x
x = "5"
Dim y
y = 5
Select Case x
Case y
MsgBox "Yes"
Case Else
MsgBox "No" 'this is what happens.
End select
VBScript不是强类型语言,也就是说它根本不知道类型 - 嗯,它有点知道。它将每个变量视为一种称为"变体"然后,它本身可以与更具体的类型具有亲和力,但是以非常混乱和容易出错的方式。我说你应该read this来了解更多信息。
你可能会遇到很多麻烦,除非你总是确定你知道什么"类型"你正在与之合作。
尝试将其更改为:
InputValue = CInt(Input)
现在你正在转换"字符串"进入"整数" (变量实际上仍然是"变体"但它们与整数具有相同的基础亲和力)。但是,您需要小心,因为有人可能会输入不能够转换为整数的值,例如hello
,因此您会在此行中收到错误消息。在转换之前,您需要先进行一些错误检查。