多个条件循环

时间:2015-03-20 07:42:18

标签: vbscript

我需要一个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。

1 个答案:

答案 0 :(得分:2)

你需要一个循环。对于每个(变体)输入,您需要检查:

  1. 是空的(用户按下取消或X) - 中止
  2. 是空白(零长度或空格序列)字符串
  3. 是数字
  4. 是一个整数
  5. 是否在范围内 - 接受
  6. 如:

    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)。