Кажется, я не могу правильно запустить эту программу

#vb.net

#vb.net

Вопрос:

продолжает говорить, нажмите любую клавишу, чтобы продолжить, я перепроверил и следовал, как я узнал, но все равно не повезло, пожалуйста, помогите мне исправить эту проблему, и sub main может быть пустым, верно??? Num и Num 1 являются глобальными переменными

 Module Module1
Dim Num, Num1 As Integer

Sub Menu()
    Dim choice As Char

    While choice <> "Q" And choice <> "q"

        Console.Clear()

        Console.WriteLine("Simple Maths Calculator")
        Console.WriteLine()
        Console.WriteLine("enter choice: ")
        Console.WriteLine("enter (a) for add")
        Console.WriteLine("enter (b) for subtract")
        Console.WriteLine("enter (q) for quit")

        choice = Console.ReadLine()

        If choice <> "Q" And choice <> "q" Then
            TwoNumber()
        End If
        If choice = "A" Or "a" Then
            Add()
        ElseIf choice = "B" Or "b" Then
            Subtract()
        End If

    End While
End Sub
Sub Add()
    Console.WriteLine("the solution is: " amp; Num   Num1)
    Console.ReadLine()
End Sub
Sub Subtract()
    Console.WriteLine("the solution is: " amp; Num - Num1)
    Console.ReadLine()
End Sub
Sub TwoNumber()
    Console.WriteLine("enter first number")
    Num = Console.ReadLine()
    Console.WriteLine("enter second number")
    Num1 = Console.ReadLine()
End Sub
Sub Main()
    Menu()
End Sub
 

Конечный модуль

Комментарии:

1. Main() — это точка входа в консольные приложения, ваша управляющая логика должна быть там. В вашем случае, похоже, вам просто нужно добавить вызов Menu() внутри Main()

2. Вы должны включить опцию Strict. Это уменьшит количество проблем, с которыми вы столкнетесь.

3. @soohoonigan спасибо за это, я сделал это, теперь он говорит, что преобразование из строки «a» в тип «Boolean» недопустимо после того, как я ввожу выбор и ввожу как Num, так и Num1, он не выполняет и не показывает вычисление.

4. это не то, как вы сравниваете. if choice="A" or choice = "a" Then как ты сделал с Q. Видите разницу? Кроме того, посмотрите на строку. ToLower() это решит проблему проверки в обоих случаях.

5. Если вы добавите «option strict on» и «option explicit on», как предложил the_lotus, в самый верх вашего файла кода, visual Studio покажет вам, где находятся ошибки преобразования, почему они происходят, и предложит способы их исправления при наведении курсора мыши на ошибки

Ответ №1:

Помимо проверки того, что Main() вызывает Menu(), большинство ваших проблем возникают из-за неправильного преобразования типов данных. В частности, преобразование строки ввода пользователя ReadLine() в целые числа и проверка равенства символов. При сравнении двух вещей в.Net вы обычно хотите, чтобы вы «OrElse» или «AndAlso», они ведут себя по-разному и так, как (по крайней мере, я) ожидаю обычного и / Или поведения. Но если вы правильно проверите символы, вам даже не понадобится and / or в этом случае. Добавление «Option Strict On» и «Option Explicit On» в начало вашего файла кода также помогает выявить эти ошибки на ранней стадии, чтобы их можно было устранить, и рекомендуется всегда строго вводить свой код. Предотвращает ошибки преобразования, подобные тем, с которыми вы столкнулись, и помогает гарантировать, что ваш код не будет вести себя непредсказуемым образом. По мере того, как вы становитесь более опытными, обработка ошибок также является хорошей идеей, чтобы убедиться, что пользователь вводит число, потому что даже с моими изменениями, если пользователь ввел «J» или «1.1» вместо числа внутри TwoNumber(), программа завершится сбоем или вы потеряете десятичную дробьточка : (Но на данный момент, с применением нескольких простых изменений в приведениях и сравнениях, код выглядит следующим образом и должен работать нормально

 Option Strict On
Option Explicit On

Module Module1

    Dim Num, Num1 As Integer

    Sub Menu()
        Dim choice As Char

        While Not Char.ToLower(choice).Equals("q"c) 'check if choice is equal to Q/q

            Console.Clear()

            Console.WriteLine("Simple Maths Calculator")
            Console.WriteLine()
            Console.WriteLine("enter choice: ")
            Console.WriteLine("enter (a) for add")
            Console.WriteLine("enter (b) for subtract")
            Console.WriteLine("enter (q) for quit")

            choice = CType(Console.ReadLine(), Char)

            If Not Char.ToLower(choice).Equals("q"c) Then
                TwoNumber()
            End If
            If Char.ToLower(choice).Equals("a"c) Then
                Add()
            ElseIf Char.ToLower(choice).Equals("b"c) Then
                Subtract()
            End If

        End While
    End Sub
    Sub Add()
        Console.WriteLine("the solution is: " amp; Num   Num1)
        Console.ReadLine()
    End Sub
    Sub Subtract()
        Console.WriteLine("the solution is: " amp; Num - Num1)
        Console.ReadLine()
    End Sub
    Sub TwoNumber()
        Console.WriteLine("enter first number")
        Num = CInt(Console.ReadLine()) 'Convert the inputted string into an integer
        Console.WriteLine("enter second number")
        Num1 = CInt(Console.ReadLine()) 'Convert the inputted string into an integer
    End Sub
    Sub Main()
        Menu()
    End Sub

End Module