Калькулятор контрольных массивов в VB6

В моем вычислительном классе мы работали над использованием контрольных массивов для создания базового калькулятора. Имейте в виду, что я никогда раньше не работал с контрольными массивами. Это код, который у меня сейчас есть:

Option Explicit
Private Sub CmdCalc_Click(Index As Integer)
    Dim TempSave1 As Double
    Dim Answer As Double
    Dim Symbol As String
    Dim TempSave2 As Double

    If CmdCalc(Index) = 10 Then
        TempSave1 = LblOutput.Caption
        Symbol = "/"
    ElseIf CmdCalc(Index) = 11 Then
        TempSave1 = LblOutput.Caption
        Symbol = "*"
    ElseIf CmdCalc(Index) = 12 Then
        TempSave1 = LblOutput.Caption
        Symbol = "-"
    ElseIf CmdCalc(Index) = 14 Then
        TempSave1 = LblOutput.Caption
        Symbol = "+"
    End If

    LblOutput.Caption = ""

    If Index = 13 Then
        TempSave2 = LblOutput.Caption
        Answer = TempSave1 & Symbol & TempSave2
    End If

    If Index = 0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14 Then
        LblOutput.Caption = LblOutput.Caption & CmdCalc(Index).Caption
    End If
End Sub


Private Sub CmdClear_Click()
    LblOutput.Caption = ""
End Sub

Единственная проблема, с которой я столкнулся, заключается в том, что после нажатия кнопки "=" переменная TempSave2 (используемая для получения моего ответа) остается пустой вместо числа, введенного пользователем. Я не уверен, как это исправить. Пытался все это переставить. Любая помощь приветствуется.

Первый пост здесь, пожалуйста, извините за плохой макет!

Спасибо, Кейран.

Калькулятор контрольных массивов в VB6

Простите за ужасную цветовую схему. Моя идея заключалась в том, что если мой учитель заставляет меня изучить эту ужасную концепцию, он сможет справиться с ужасными цветами: P

Вы прямо сейчас изучаете vb6? Соболезнования. Массивы управления больше не являются частью современного языка VB.

Joel Coehoorn 11.06.2018 16:31

Кроме того, линия If Index = 0 Or 1 Or 2 Or 3 ... работает не так, как вы думаете. Это будет побитовое Or для этого целого числа, чтобы создать единственное целочисленное значение, а затем сравнить это единственное значение с переменной index.

Joel Coehoorn 11.06.2018 16:32

Джоэл Кохорн, К сожалению, это единственная среда, в которой преподает моя школа :( Я понимаю, что она устарела, и я уже попросил либо обновить среду, либо использовать совсем другую. Ха-ха

Keiran O'Sullivan 12.06.2018 09:33
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
3
1 124
1

Ответы 1

Во-первых, вы хотите проверить значение индекса ниже, а не CmdCalc (Index):

If Index = 10 Then
    TempSave1 = LblOutput.Caption
    Symbol = "/"
ElseIf Index = 11 Then
    TempSave1 = LblOutput.Caption
    Symbol = "*"
ElseIf Index = 12 Then
    TempSave1 = LblOutput.Caption
    Symbol = "-"
ElseIf Index = 14 Then
    TempSave1 = LblOutput.Caption
    Symbol = "+"
End If

Далее ваша строка:

If Index = 0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14 Then

не делает то, что вы думаете. Он оценивает все операторы Or вместе, а затем сравнивает их с Index. Это как если бы это было написано со следующими круглыми скобками:

If Index = (0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14) Then

Я считаю, что этот код будет оцениваться ТОЛЬКО как истина, если Index = 14, но я не выполнял фактическую битовую математику, но, тем не менее, это явно не то, что вы хотите.

Есть несколько способов написать это, но самый короткий из них:

If (Index >= 0 And Index <= 12) Or Index = 14 Then

Не видя фактического экрана, я не могу комментировать остальную часть кода.

Результатом экспрессии Or является 15. См. Здесь: rextester.com/HBRS42698 Link использует VB.Net, но я был бы удивлен, если vb6 отличается от этого. Лично я бы сделал If Index >=0 And Index <= 14 And Index <> 13 Then

Joel Coehoorn 11.06.2018 16:36

1, 2, 4 и 8 - or'ed действительно было бы 15. Остальное не имело значения - я виню задержку с распространением кофеина :) Спасибо за другой пример - новые программисты должны понимать, что (почти) всегда больше, чем один «правильный» ответ.

Bill Hileman 11.06.2018 16:47

Я все еще не могу заставить TempSave2 сохранить второе число, которое вводит пользователь. Вместо этого он дает мне ошибку несоответствия типа. :(

Keiran O'Sullivan 12.06.2018 12:17

Вам нужно преобразовать подписи (строки) в двойные. TempSave1 = CDbl(LblOutput.Caption) или TempSave1 = Val(LblOutput.Caption)

Bill Hileman 12.06.2018 13:15

Спасибо! Решено сейчас. Я сделал свою переменную глобальной вместо локальной, чтобы они не перезаписывались каждый раз при запуске подпрограммы.

Keiran O'Sullivan 13.06.2018 12:12

Объяснение скобок Or совершенно неверно. Первый If оценивается как True для любого значения Index (попробуйте -1, 42 и т. д.), В то время как повторная запись оценивается как True только для Index = 15 - почему?

wqw 14.06.2018 12:03

Другие вопросы по теме