我需要一个VBScript循环,要求输入1到10之间的整数,包括,如果输入了错误的符号或数字,则再次询问,直到从用户检索到所需的数字。
这就是我的尝试:
Option Explicit
Dim Num
Num=inputbox("Please enter integer number between 1 to 10")
'Checking if entered value is numeric
Do while not isnumeric(Num)
Num=inputbox("Please enter integer number between 1 to 10", "INCORRECT SYMBOL")
Loop
Do while (Num<1 or Num>10)
Num=inputbox("Please enter integer number between 1 to 10 ", "Number is NOT IN RANGE")
Loop
Do while not int(Num)
Num=inputbox("Please enter integer number between 1 to 10 ", "Number is NOT INTEGER")
Loop
不起作用:当我输入3例如我得到输入框说&#34;数字不是INTEGER&#34;,输入字母时我收到错误消息类型不匹配字符串,错误代码800A00D。
答案 0 :(得分:2)
你需要一个循环。对于每个(变体)输入,您需要检查:
如:
Option Explicit
Dim vNum, sNum, nNum
Do
vNum = InputBox("Please enter an integer beween 1 and 10 (inclusive)")
If IsEmpty(vNum) Then
WScript.Echo "Aborted"
Exit Do
Else
sNum = Trim(vNum)
If "" = sNum Then
WScript.Echo "Empty string"
Else
If IsNumeric(sNum) Then
nNum = CDbl(sNum)
If nNum <> Fix(nNum) Then
WScript.Echo "Not an Integer"
Else
If nNum < 1 Or nNum > 10 Then
WScript.Echo "Not in range"
Else
WScript.Echo nNum, "is ok"
Exit Do
End If
End If
Else
WScript.Echo "Not a number"
End If
End If
End If
Loop
WScript.Echo "Done"
对不同的数据类型使用不同的变量可能很迂腐,但应该说明你遇到类型问题的原因。
您
Do while not int(Num)
不能按预期工作,因为这里Num是1到10之间的数字;四舍五入(不存在)小数部分再次给出Num; Num在布尔上下文中评估/作为bool给出(总是)True。
更新评论:
Trim从字符串的头部或尾部移除空间; WScript.Echo将输出发送到控制台(cscript)或对话框(wscript)。
<强>更新强>
正如this question所示,我没有说明按下取消或X(关闭)将vNum设置为空变量,这与空/零长度字符串不同。因此,它应被视为用户意图中止的指示。
顺便说一句:你需要阅读文档,但你始终不能相信它们(参见here)。