Random VBS脚本和随机开关

Random VBS脚本和随机开关,random,vbscript,wsh,Random,Vbscript,Wsh,在下面的程序中,r被初始化为一个四舍五入的随机数,并提示用户猜测。如果用户猜测正确,则会出现一个提示,否则会出现另一个提示。代码看起来是正确的,但是当运行Else时,无论用户的号码是否正确,都会选择Else。请帮帮我,我已经读了很多遍了,很疼 Set WshShell = WScript.CreateObject("WScript.Shell") 'This script is designed to create a random number, and have a user guess t

在下面的程序中,r被初始化为一个四舍五入的随机数,并提示用户猜测。如果用户猜测正确,则会出现一个提示,否则会出现另一个提示。代码看起来是正确的,但是当运行Else时,无论用户的号码是否正确,都会选择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

问题是
InputValue
String
类型,因为这是
InputBox
函数返回的内容,
r
是一个
整数
,所以当您将
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不是一种强类型语言,也就是说,它根本不知道类型——嗯,它有点知道。它将每个变量视为一种称为“variant”的类型,而“variant”本身可能与更具体的类型有关联,但这种关联方式非常混乱且容易出错。我想你应该多了解一些

除非你总是确定你知道你在用什么“类型”工作,否则你可能会遇到很多麻烦

尝试将其更改为:

InputValue = CInt(Input)

现在您正在将“字符串”转换为“整数”(这两个变量实际上仍然是“变量”,但它们与整数具有相同的底层关联)。但是,您需要小心,因为可能有人输入了一个无法转换为整数的值,例如,
hello
,因此您将在这一行中得到一个错误。在转换之前,您需要先进行一些错误检查。

问题在于
InputValue
字符串
类型,因为这是
InputBox
函数返回的内容,
r
是一个
整数
,所以当您将
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不是一种强类型语言,也就是说,它根本不知道类型——嗯,它有点知道。它将每个变量视为一种称为“variant”的类型,而“variant”本身可能与更具体的类型有关联,但这种关联方式非常混乱且容易出错。我想你应该多了解一些

除非你总是确定你知道你在用什么“类型”工作,否则你可能会遇到很多麻烦

尝试将其更改为:

InputValue = CInt(Input)

现在您正在将“字符串”转换为“整数”(这两个变量实际上仍然是“变量”,但它们与整数具有相同的底层关联)。但是,您需要小心,因为可能有人输入了一个无法转换为整数的值,例如,
hello
,因此您将在这一行中得到一个错误。在转换之前,您需要先进行一些错误检查。

快速检查是您所需要的全部
如果Len(Input&“”)>0并且是numeric(Input&“”),那么Input=CLng(Input)Else Input=0
我删除了我指出的注释
选择案例“5”:案例5:msgbox“yes”:end select
yes
,因为正如您所说,变量都是具有不同类型的变量,而常量文本可能得到不同的处理,如果Len(Input&“”)大于0且为数值(Input&“”),则Input=CLng(Input),则只需快速检查Else input=0我删除了注释,其中我指出
选择案例“5”:案例5:msgbox“yes”:end select
yes
,因为正如您所说,变量都是具有不同类型的变量,而常量文本可能得到不同的处理,