2017-01-20 2 views
0

Хорошо, я пытаюсь преобразовать пользователь заданную десятичного числа в двоичный, но Internet Explorer дает мне эту ошибку:Разве это не так, как вы передаете динамический массив в качестве аргумента функции в VBScript?

Type mismatch error

не то, что, как вы отправите динамический массив в качестве аргумента функции в VBScript?

код VBScript:

Function toBinary(number, binary) 
    Dim remainder : remainder = 0 
    Dim index : index = 0 

    While (number <> 0) 
     remainder = number Mod 2 
     number = number \ 2 
     ReDim binary(index) 
     binary(index) = remainder 
     index = index + 1 
    Wend 

    toBinary = binary 
End Function 

Dim number 
Dim response : response = vbYes 
Dim binary() 

While (response = vbYes) 
    number = InputBox("Enter A Decimal Number: ") 
    If (Not IsNumeric(number)) Then 
     response = MsgBox("Wrong Input, Wanna Try Again? ", vbYesNo) 
    Else 
     MsgBox (number & " is equal to " & toBinary(number, binary) & " in Binary") 
     response = vbNo 
    End If 
Wend 

ответ

1

В строке msgbox (number & " is equal to " & toBinary(number, binary) & " in Binary") функция toBinary(...) возвращает массив. Массив не может быть преобразован в строку в vbscript, поэтому, когда вы объединяете его для отображения, вы получаете сообщение об ошибке.

В вашем примере, я хотел бы предложить вам построить строку вместо массива и возвращает эту строку:

Function toBinary(value) 
    dim result : result = "" 
    dim remainder : remainder = 0 

    If value = 0 Then 
     result = "0" 
    Else 
     While (value <> 0)        
      remainder = value Mod 2 
      result = remainder & result 
      value = value \ 2 
     Wend 
    End If 

    toBinary = result 
End Function 

dim number 
dim response : response = vbYes     
dim binary() 

while (response = vbYes) 
    number = inputbox("Enter A Decimal Number: ") 
    if (Not IsNumeric(number)) then 
     response = msgbox("Wrong Input, Wanna Try Again ? ", vbYesNo) 
    else 
     msgbox (number & " is equal to " & toBinary(number) & " in Binary") 
     response = vbNo 
    end if  
wend 
+0

Или они могли бы использовать 'Join()'. – Lankymart

+1

действительно, но тогда, если бы было полезно сделать 'ReDim Preserve двоичный (индекс)', чтобы гарантировать, что массив не сбрасывается –

+0

Абсолютно, я просто указывал, что метод «Массив» по-прежнему является опцией. – Lankymart