0

我刚开始在 VS2010 中使用 VB,并尝试编写一个简单的控制台计算器。但是,我不能让它等待显示输出。即使在放置 Console.Read() 之后,控制台窗口也会立即关闭。我猜我的 ReadLine() 的输入缓冲区仍然有一些有效字符。我将代码粘贴在这里:

子主()

    Dim num1 As Double
    Dim num2 As Double
    Dim op As Char
    Dim ans As Double

    Console.Write("Enter first number:")

    num1 = CType(Console.ReadLine(), Double)

    Console.Write("Enter second number:")
    num2 = CType(Console.ReadLine(), Double)

    Console.Write("Enter an operator:")
    op = ChrW(Console.Read())

    Select Case op
        Case "+"
            ans = num1 + num2
            Console.WriteLine("Result=" + ans.ToString())

        Case "-"
            ans = num1 - num2
            Console.WriteLine("Result=" + ans.ToString())


        Case "*"
            ans = num1 * num2
            Console.WriteLine("Result=" + ans.ToString())

        Case "/"
            If num2 <> 0 Then
                ans = num1 / num2
                Console.WriteLine("Result=" + ans.ToString())
            Else : Console.WriteLine("Error: Division by zero")
            End If

    End Select

    Console.Read()

End Sub

我注意到我需要在代码末尾放置 3 个 Console.Read() 才能最终让控制台等待。为什么会这样?

4

3 回答 3

1

尝试将其添加到末尾,您会看到发生了什么:

Console.WriteLine(Console.Read().ToString())
Console.WriteLine(Console.Read().ToString())
Console.Read()

当你点击 return 时, Console.Readforop被解锁,但是回车/换行序列在缓冲区中并且没有被消耗。所以两个额外Console.Read的调用清除 CR (Dec: 13)/LF (Dec: 10) 然后你想要的第三个块。

Console.ReadLine不起作用,因为它消耗 CR/LF 并且没有任何东西可以阻止现有的应用程序。两个Console.ReadLine电话或Console.ReadLine随后Console.Read将起作用。

于 2012-08-16T22:59:20.973 回答
1

使用 Console.Readkey():

Dim num1 As Double
Dim num2 As Double
Dim op As Char
Dim ans As Double

Console.Write("Enter first number:")

num1 = CType(Console.ReadLine(), Double)

Console.Write("Enter second number:")
num2 = CType(Console.ReadLine(), Double)

Console.Write("Enter an operator:")
op = ChrW(Console.Read())

Select Case op
    Case "+"
        ans = num1 + num2
        Console.WriteLine("Result=" + ans.ToString())

    Case "-"
        ans = num1 - num2
        Console.WriteLine("Result=" + ans.ToString())


    Case "*"
        ans = num1 * num2
        Console.WriteLine("Result=" + ans.ToString())

    Case "/"
        If num2 <> 0 Then
            ans = num1 / num2
            Console.WriteLine("Result=" + ans.ToString())
        Else : Console.WriteLine("Error: Division by zero")
        End If

End Select

Console.ReadKey()
于 2019-09-02T11:55:13.413 回答
0

我已尝试作为您的代码,但将“op = ChrW(Console.Read())”更改为“op = Console.ReadLine()”,并且运行良好

Sub Main()

    Dim num1 As Double
    Dim num2 As Double
    Dim op As Char
    Dim ans As Double

    Console.Write("Enter first number:")

    num1 = CType(Console.ReadLine(), Double)

    Console.Write("Enter second number:")
    num2 = CType(Console.ReadLine(), Double)

    Console.Write("Enter an operator:")
    op = Console.ReadLine()

    Select Case op
        Case "+"
            ans = num1 + num2
            Console.WriteLine("Result=" + ans.ToString())

        Case "-"
            ans = num1 - num2
            Console.WriteLine("Result=" + ans.ToString())


        Case "*"
            ans = num1 * num2
            Console.WriteLine("Result=" + ans.ToString())

        Case "/"
            If num2 <> 0 Then
                ans = num1 / num2
                Console.WriteLine("Result=" + ans.ToString())
            Else : Console.WriteLine("Error: Division by zero")
            End If

    End Select

    Console.Read()

End Sub
于 2019-09-02T13:10:09.890 回答