ошибка переполнения CINT в моем скрипте VB - PullRequest
0 голосов
/ 13 апреля 2011

Я новичок в программировании и беру базовый класс программирования VB-скриптов в качестве требования к степени, над которой я работаю. У меня есть эта программа, которая конвертирует числа по Цельсию в farhenheit и делает это с шагом и суммой, которую нужно просмотреть. Эта программа прекрасно работает с блок-схемой визуальной логики, и я потратил более 25 часов, пытаясь заставить эту программу работать. Я знаю, что это должно быть что-то совершенно глупое, но, будучи новичком в мире программирования, я в растерянности, и у меня нет ответов. Может ли кто-нибудь взглянуть на этот сценарий, он очень простой и посмотреть, есть ли что-то, чего мне не хватает. Ошибка всегда появляется после Else в fahtemp = (9/5) * tempaccum + 32. Любой инсайт будет принят с благодарностью. Заранее спасибо за ваше время. Jon

Option Explicit
Dim celtemp, amttemp, increment 
Dim newtemp, tempaccum, fahtemp, loopnum, templist

celtemp = inputbox("What is your starting Temp?")
amttemp = inputbox("How many temperatures do you want displayed?")
increment = inputbox("What temperature increments do you want?")

Do while loopnum < amttemp

    loopnum = loopnum +1
    If loopnum = 1 then
        tempaccum = celtemp
        fahtemp = (9/5) * (tempaccum) +32
        templist = "1." & "Cel Temp: " &tempaccum & "- " & "Fah Temp: " &fahtemp
    else
        tempaccum = tempaccum + increment
        fahtemp = (9/5) * tempaccum + 32
        templist = templist &" " &loopnum & "." & "Cel Temp: " &tempaccum & "- " & "Fah Temp: " &fahtemp
    End If

    newtemp = celtemp + increment

Loop

Document.write "We are starting at Temp: " &celtemp
Document.write "<br> We are displaying " &amttemp & "times."
Document.write "<br> We are incrementing by: " &increment
Document.write "<br> The Temperature Table is as follows: " &templist

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

@ 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"
1 голос
/ 13 апреля 2011

Ошибка переполнения возникает при попытке сохранить значение больше, чем может обработать тип данных.

Если ваши входы слишком велики, вы столкнетесь с этой ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...