问题描述:

How can I make this Calculator work if the user enters 1+1?

It only works if I enter 1 + 1 ;C

The calculation must be in 1 line.

x = inputbox("Calculation", "Calculator", "1+1")

y = Split(x)

if not isnumeric (y(0)) then

wscript.quit

end if

if not isnumeric (y(2)) then

wscript.quit

end if

if y(1) = "+" then

z = int(y(0)) + int(y(2))

msgbox(z)

end if

if y(1) = "-" then

z = int(y(0)) - int(y(2))

msgbox(z)

end if

if y(1) = "*" then

z = int(y(0)) * int(y(2))

msgbox(z)

end if

if y(1) = "/" then

z = int(y(0)) / int(y(2))

msgbox(z)

end if

if y(1) = "%" then

z = int(y(0)) MOD int(y(2))

msgbox(z)

end if

Thanks for any Answer!

网友答案:

Try next code snippet (commented for explanation):

Dim ii, sOperator, strExpr, y 
strExpr = inputbox("Calculation", "Calculator", "1+1")

' insert spaces around all operators
For Each sOperator in Array("+","-","*","/","%")
  strExpr = Trim( Replace( strExpr, sOperator, Space(1) & sOperator & Space(1)))
Next
' replace all multi spaces with a single space 
Do While Instr( strExpr, Space(2))
  strExpr = Trim( Replace( strExpr, Space(2), Space(1)))
Loop

y = Split(strExpr)
''' your script continues here

Another approach (allows more than pure arithmetic operations) using Eval Function (which evaluates an expression and returns the result) and basic error handling:

option explicit
On Error GoTo 0

Dim strResult: strResult = Wscript.ScriptName
Dim strExpr, strInExp, strLastY, yyy
strInExp = "1+1"
strLastY = ""
Do While True

  strExpr = inputbox("Last calculation:" & vbCR & strLastY, "Calculator", strInExp)

  If Len( strExpr) = 0 Then Exit Do 

  ''' in my locale, decimal separator is a comma but VBScript arithmetics premises a dot  
  strExpr = Replace( strExpr, ",", ".")   ''' locale specific

  On Error Resume Next             ' enable error handling
  yyy = Eval( strExpr)
  If Err.Number = 0 Then
    strInExp = CStr( yyy)
    strLastY = strExpr & vbTab & strInExp
    strResult = strResult & vbNewLine & strLastY
  Else
    strLastY = strExpr & vbTab & "!!! 0x" & Hex(Err.Number) & " " & Err.Description
    strInExp = strExpr
    strResult = strResult & vbNewLine & strLastY
  End If
  On Error GoTo 0                  ' disable error handling
Loop

Wscript.Echo strResult
Wscript.Quit

Sample output:

==> cscript //NOLOGO D:\VB_scripts\SO\39934370.vbs
39934370.vbs
1+1     2
2/4     0,5
0.5**8  !!! 0x3EA Syntax error
0.5*8   4
4=4     True
True+5  4
4=5     False
False+5 5
5       5

==>
相关阅读:
Top