@ Jon Gammon: tempaccum = tempaccum + increment
не рассчитывается так, как вы могли бы подумать, вместо добавления приращения, как числа, он объединял его как строку, т.е. если начальная температура равна 10
, приращение равно5
и число отображаемых значений 3
, вы ожидаете, что ваш вывод будет
1. Cel Temp: 10 - Fah Temp: 50
2. Cel Temp: 15 - Fah Temp: 59
3. Cel Temp: 20 - Fah Temp: 68
Вместо этого вы получите
1. Cel Temp: 10 - Fah Temp: 50
2. Cel Temp: 105 - Fah Temp: 221
3. Cel Temp: 1055 - Fah Temp: 1931
Это и стало причиной переполненияпотому что tempaccum
стал огромным, и дальнейшие умножения на нем сломали бы сценарий.Document.Write
также не является допустимым кодом VBScript, поэтому я превратил его в MsgBox
.
Вот рабочая и проверенная копия вашего скрипта, которую я немного переписал, чтобы исправить вышеупомянутые проблемы и немного улучшить ее:
Option Explicit
Dim celtemp, amttemp, increment
Dim tempaccum, fahtemp, loopnum, templist
celtemp = inputbox("What is your starting temperature?")
amttemp = inputbox("How many temperatures do you want displayed?")
increment = inputbox("What temperature increments do you want?")
' Formula to converts Celcius to Fahrenheit
Function fahrenheit(ByRef celcius)
fahrenheit = ((9 / 5)* celcius) + 32
End Function
' Some error checking
If NOT IsNumeric(amttemp) Then
amttemp = 1
Else
amttemp = Fix(amttemp) ' only interested in integer part '
End If
For loopnum = 1 To amttemp
If loopnum = 1 then
tempaccum = celtemp
fahtemp = fahrenheit(tempaccum)
templist = "1. " & "Cel Temp: " & tempaccum & _
" - " & "Fah Temp: " & fahtemp & vbCrLf
Else
tempaccum = celtemp + (increment * (loopnum - 1))
fahtemp = fahrenheit(tempaccum)
templist = templist & loopnum & ". " & _
"Cel Temp: " & tempaccum & " - " & _
"Fah Temp: " & fahtemp & vbCrLf
End If
Next
MsgBox "Starting at temperature: " & celtemp & vbCrLf & _
"Displaying " &amttemp & " times." & vbCrLf & _
"Incrementing by: " &increment & vbCrLf & vbCrLf & _
"The temperature table is as follows: " & vbCrLf & templist, 0, _
"Temperature Converter"
Обновление
Мой класс довольно прост, мы не работали с функциями, и на самом деле единственное, что мы сделали, - это вводы, в то время как циклы,Выбор случая и если.Так что у меня были полные руки, пытаясь закодировать это.Хотя ваш работает превосходно, я боюсь, что он немного более продвинут, чем тот, в котором мы находимся.
Понятно, я вернулся к исходному сценарию и обновил только те части, которые былиломая его, как упоминалось ранее. Вот новая рабочая копия :
Option Explicit
Dim celtemp, amttemp, increment
Dim tempaccum, fahtemp, loopnum, templist
celtemp = inputbox("What is your starting temperature?")
amttemp = inputbox("How many temperatures do you want displayed?")
increment = inputbox("What temperature increments do you want?")
loopnum = 1
Do While loopnum < CInt(amttemp)
If loopnum = 1 Then
tempaccum = celtemp
fahtemp = ((9 / 5) * tempaccum) + 32
templist = "1. Cel Temp: " & tempaccum & " - " & "Fah Temp: " & fahtemp & vbCrLf
Else
tempaccum = celtemp + (increment * loopnum)
fahtemp = ((9 / 5) * tempaccum) + 32
templist = templist & loopnum & ". Cel Temp: " & tempaccum & " - " & "Fah Temp: " & fahtemp & vbCrLf
End If
loopnum = loopnum + 1
Loop
MsgBox "Starting at temperature: " & celtemp & vbCrLf & _
"Displaying " & amttemp & " times." & vbCrLf & _
"Incrementing by: " & increment & vbCrLf & vbCrLf & _
"The temperature table is as follows: " & vbCrLf & templist, 0, _
"Temperature Converter"