清除输入缓冲区:Visual Basic

时间:2012-08-16 06:51:23

标签: vb.net input

我刚刚开始在VS2010中使用VB并尝试编写一个简单的控制台计算器。但是,我无法让它等待显示输出。即使在放入Console.Read()之后,控制台窗口也会立即关闭。我想我的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 = 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(),以便最终让控制台等待。为什么会这样?

3 个答案:

答案 0 :(得分:1)

尝试将此添加到最后,您将看到发生了什么:

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

Console.Read for op is unblocked when you hit return,但回车/换行序列在缓冲区中并且尚未消耗。因此,另外两个Console.Read调用清除了CR(12月13日)/ LF(12月10日),然后是你想要的第3个块。

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

答案 1 :(得分:0)

使用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()

答案 2 :(得分: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