|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. Рекомендуемая структура скрипта. Ошибки и отладкаОбработка ошибок в VBScript: самостоятельная работа Упражнение 1. Обработка ошибокСкопируйте на свой компьютер файл \\London\templates\errors.vbs и откройте его в PrimalScript. Этот скрипт выполняет деление двух введенных вами чисел. Реализуйте обработку ошибок таким образом, чтобы: 1) при значении второго числа, равного 0, пользователю выдавалось сообщение "Делить на ноль нельзя!" и приглашение ввести другое число; 2) если пользователь в любом из окон ввода нажал кнопку Cancel, выводилось повторное приглашение вести это число; 3) если пользователь ввел в любом из окон ввода строковое значение, выводилось сообщение "Нужно число" и повторное приглашение на ввод числа. Код скрипта errors.vbs выглядит так: Option Explicit Dim nNum1 nNum1 = InputBox("Введите первое число") nResult = nNum1 / nNum2 MsgBox nResult,, "Результат деления" Ответ к упражнению 1. Обработка ошибокЗадачу можно решить разными способами. Например, Microsoft в одном из учебных курсов предлагает такой вариант решения с вызовом функции из самой себя: Call MainProc Sub MainProc() Dim nRes1, nAnwser nRes1 = fDiv() Select Case nRes1 Case 1 MsgBox("Деление на ноль!") nAnwser = MsgBox ("Начать заново?", vbYesNo) If nAnwser = vbYes Then Call MainProc Else WScript.Quit End If Case 2 MsgBox("Нужно число!") nAnwser = MsgBox ("Начать заново?", vbYesNo) If nAnwser = vbYes Then Call MainProc Else WScript.Quit End If Case 3 MsgBox("Возникла неизвестная ошибка") nAnwser = MsgBox ("Начать заново?", vbYesNo) If nAnwser = vbYes Then Call MainProc Else WScript.Quit End If End Select End Sub Function fDiv() On Error Resume Next Dim nNum2, nNum1, nResult nNum1 = InputBox("Введите первое число") nNum2 = InputBox("Введите второе число") nResult = CInt(nNum1)/Cint(nNum2) Select Case Err.Number Case 0 MsgBox nResult fDiv = 0 Case 11 fDiv = 1 Case 13 fDiv = 2 Case Else fDiv = 3 End Select End Function Другой вариант решения – использовать цикл и обработку ошибок: Option Explicit Dim nNum1 Dim nNum2 Dim nResult Dim sError nNum1 = "" nNum2 = "" do nNum1 = InputBox("Введите первое число:") On Error Resume next sError = CInt(nNum1) If Err.Number = 13 Then MsgBox ("Повторите ввод") nNum1 = "" End If On Error goto 0 loop while (nNum1 = "") do nNum2 = InputBox("Введите второе число:") On Error Resume next sError = CInt(nNum2) If Err.Number = 13 Then MsgBox ("Повторите ввод") nNum2 = "" Elseif nNum2 = 0 Then MsgBox ("Делить на ноль нельзя!") nNum2 = "" End If On Error goto 0 Loop While (nNum2 = "") nResult = nNum1 / nNum2 MsgBox nResult,, "Результат деления: " Третий вариант – самый лучший – вообще не допускает возникновения ошибок: Option Explicit Dim nNum1 Dim nNum2 Dim nResult Do nNum1 = InputBox("Введите первое число: ") If IsNumeric(nNum1 & "") Then Exit Do MsgBox "Нужно число!" Loop Do nNum2 = InputBox("Введите второе число: ") If IsNumeric(nNum2 & "") Then If Int(nNum2)<>0 Then Exit Do MsgBox "Деление на ноль!" Else MsgBox "Нужно число!" End if Loop nResult = nNum1 / nNum2 MsgBox nResult,, "Результат деления: "
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||