2015-03-20 2 views
1

Мне нужен цикл 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, например, я получаю InputBox говоря «номер не INTEGER», при вводе буквы я получаю ошибки типа сообщения о несоответствии строки , код ошибки 800A00D.

+1

Как он не работает? –

+0

, когда я вхожу в 3, например, я получаю сообщение ввода «Number is NOT INTEGER», при вводе буквы я получаю сообщение об ошибке Тип строки несоответствия, код ошибки 800A00D. Мне нужны все условия в одной функции или в одном цикле. Но когда в одном цикле он говорит: не может выполнять математические действия в строке.У нас был очень короткий тренинг VBS –

+0

в Сонер Gönül: Это должно быть что-то подобное, но он не работает либо Option Explicit Dim Num Num = InputBox («Пожалуйста, введите целое число от 1 до 10») «Проверка если введенное значение числовой Do пока не IsNumeric (Num) или (Num <1 or Num> 10) \t Num = InputBox ("Пожалуйста, введите целое число от 1 до 10", "НЕПРАВИЛЬНЫЙ SYMBOL") Loop –

ответ

2

Вам нужна одна петля. Для каждого (вариант) входа вам необходимо проверить:

  1. это Empty (Пользователь нажал Отмена или X) - Прервать
  2. это пустой (нулевой длины или последовательность пробелов) строка
  3. является его числовое
  4. это целое число
  5. он в диапазоне - Принять

как в:

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 снова; Число, вычисляемое в булевом контексте/как bool, дает (всегда) True.

Update WRT комментарий:

Trim удаляет пространство от головы или хвоста строки; WScript.Echo отправляет вывод в консоль (cscript) или в диалоговое окно (wscript).

Update:

Как this question шоу, я не ясно, что нажав кнопку Отмена или X (Закрыть) устанавливает vNum в пустой вариант, который отличается от пустой/нулевой строки длины. Поэтому его следует рассматривать как указание на намерение пользователей прекратить действие.

BTW: Вам необходимо прочитать Документы, но вы не можете верить им всегда (см. here).

+0

Спасибо! Вы объяснили это очень хорошо. Можете ли вы рассказать мне, что делает «Trim» в «sNum = Trim (vNum)»? извините, я не знаю, как использовать мини-Markdown. Я очень смущен ... WScript.Echo как Inputbox? –

+0

Спасибо! Чем больше я знаю, тем больше я понимаю, насколько мало знаю. –

+0

Еще раз спасибо вам, господин Хорнер! единственная проблема, которую я пытаюсь выучить HpQTP, и она не понимает WScript.Echo, поэтому мне нужно использовать ящик ввода или что-то еще, о котором я еще не узнал. –

Смежные вопросы