2015-03-26 7 views
0

Я пытаюсь получить цикл Do Until для работы в VBS. Я запрашиваю у пользователя число, а затем хочу, чтобы сценарий выполнял до тех пор, пока счетчик не будет равен числу введенного пользователем.Do Do not count using Inputbox никогда не заканчивается

number = InputBox("number") 
count = 1 

Do Until count = number 
    Wscript.Echo "count: " & count & VbCrLf &_ 
     "number: " & number 
    count = count + 1 
Loop 

Wscript.Echo "Done." & VbCrLf &_ 
    "count: " & count & VbCrLf &_ 
     "number: " & number 

Когда я запускаю это, он продолжает петлю на неопределенный срок, а не останавливаясь после подсчета равно количеству введенного пользователем. Если я не могу запросить его, я не могу его запрограммировать, но не тогда, когда пользователь вводит номер.

Может кто-нибудь указать, почему это происходит и как я могу это исправить?

ответ

2

Read VBScript Language Reference, Comparison Operators (VBScript):

Если выражение является числовым, а другой является строкой, то числовое выражение меньше строкового выражения.

count = 1 

number = InputBox("number") 

if IsNumeric(number) then number = CInt(number) else number = count 

Do Until count >= number 
    Wscript.Echo "count: " & count & VbCrLf &_ 
     "number: " & number 
    count = count + 1 
Loop 

Wscript.Echo "Done." & VbCrLf &_ 
    "count: " & count & VbCrLf &_ 
     "number: " & number 

Примечание изменения, внесенные из = сравнению с >= в Do Until count >= number.

+0

Оба этих ответа (JosefZ и Matt) полезны, особенно указывая, что вход пользователя рассматривается как строка вместо целого. Я подумал об этом, но когда я включил 'IsNumeric' в оператор Wscript.Echo раньше, он вернулся как True. Теперь я понимаю, что IsNumeric не означает Integer. Меня также смутил тот факт, что в моих экспериментах, используя 'For ... Next', вместо' Do ... Loop' работал. Во всяком случае, я изменил свой код на предложение JosefZ, и он отлично работает. Благодаря! – Jono

0

InputBox возвращает строку. Вы сравниваете строку с числом, которое никогда не совпадает с циклом. Рассмотрим следующее изменение.

number = Int(InputBox("number")) 
count = 1 

Do Until count = number 
    Wscript.Echo "count: " & count & VbCrLf & "number: " & number 
    count = count + 1 
Loop 

Я делаю нет проверки данных с этим. Просто пытаюсь показать вам эту проблему. Мы приводим результат InputBox в int, тогда условие цикла работает должным образом.

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

  • Нет связанных вопросов^_^