Другие языки программирования и технологии

что не так? Visual basic (см внутри)

как убрать эти ошибки и что не так прописано?
программа для вычисления по формуле, предусмотрев, чтобы не было 0 в знаменателе
Все дело в том, что после проверки все равно идет попытка выполнить действие.
Соответственно происходит ошибка.
Если пользователь ввел неправильные данные,
надо покидать процедуру не выполняя никаких математических расчетов.

Private Sub Command1_Click()
Dim x As Single

x = Val(chislo.Text)
If x = 2 Then
result.Captiоn = "Нельзя делить на 0"
Exit Sub
End If

' В принципе, вся эта конструкция теряет смысл,
' так как ранее использована функция Val()
' Даже если юзер введет "фывапро" или ничего не введет, то
' функция вернет "0".
' Это все можно заремарить или просто удалить
If chislo.Text = Empty Then
result.Captiоn = "Введи число"
Exit Sub
End If

result.Captiоn = (x - 1) / (x - 2)

End Sub

Немного "пригладим код" и получим

Private Sub Command1_Click()
Dim x As Single

x = Val(chislo.Text)
If x = 2 Then
result.Captiоn = "Нельзя делить на 0"
Else
result.Captiоn = (x - 1) / (x - 2)
End If

End Sub

P.S. Скриншотики, это очень хорошо, но они такие мелкие, что без микроскопа не рассмотреть...
<<< Вайнах Kz >>>
81 697
Лучший ответ
Деление на 0. О да!
Вероятно, вы пытаетесь присвоить числовой переменной текстовое значение.
Виктор Смирнов
Виктор Смирнов
16 071
плохо виден код. вроде иф не закрыт, поэтому ругается.
Подряд идут два IF вот редактор и "запутался". Лучше использовать полную конструкцию, даже если она в одну строку получится.
Ну а вообще, смотрим логику: если ввели 2, то что имеем? Выводим в result "нельзя делить на 0" и благополучно дальше считаем.. . Надо сделать так:
If x = 2 Then
result.Captiоn = "нельзя делить на 0"
exit sub
end if
Кстати, а какой смысл во второй проверке? Ну не ввел человек число. Может, он решил, что х=0. Математически это возможно...
надо сделать так, чтобы с клавиатуры нельзя было нажать 2, это реально. иначе программа делит на 0
по скольку видно иф не закрыт а так лучше написать было код и разобрались бы быстрее
IK
Igor Kirilov
130