Vb.net 清除输入缓冲区:Visual Basic

Vb.net 清除输入缓冲区:Visual Basic,vb.net,input,Vb.net,Input,我刚刚开始在VS2010中使用VB,并尝试编写一个简单的控制台计算器。但是,我不能让它等待显示输出。即使在放置console.Read()之后,console窗口也会立即关闭。我猜ReadLine()中的输入缓冲区仍然有一些有效字符。我将在此处粘贴代码: 副标题() Dim num1为双精度 双精度num2 作为字符的Dim op 双倍 控制台。写入(“输入第一个数字:”) num1=CType(Console.ReadLine(),双精度) 控制台。写入(“输入第二个数字:”) num2=CT

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

副标题()

Dim num1为双精度
双精度num2
作为字符的Dim op
双倍
控制台。写入(“输入第一个数字:”)
num1=CType(Console.ReadLine(),双精度)
控制台。写入(“输入第二个数字:”)
num2=CType(Console.ReadLine(),双精度)
控制台。写入(“输入运算符:”)
op=ChrW(Console.Read())
选择案例op
大小写“+”
ans=num1+num2
Console.WriteLine(“Result=“+ans.ToString())
案例“-”
ans=num1-num2
Console.WriteLine(“Result=“+ans.ToString())
案例“*”
ans=num1*num2
Console.WriteLine(“Result=“+ans.ToString())
案例“/”
如果num2为0,那么
ans=num1/num2
Console.WriteLine(“Result=“+ans.ToString())
Else:Console.WriteLine(“错误:除零”)
如果结束
结束选择
Console.Read()
端接头

我注意到我需要在代码的末尾放上3个Console.Read(),以便最终让控制台等待。为什么会发生这种情况?

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

Console.WriteLine(Console.Read().ToString())
Console.WriteLine(Console.Read().ToString())
Console.Read()
是,但回车/换行序列在缓冲区中,尚未使用。因此,另外两个
Console.Read
调用清除CR(Dec:13)/LF(Dec:10),然后根据需要清除第三个块

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

使用Console.Readkey()

Dim num1为双精度
双精度num2
作为字符的Dim op
双倍
控制台。写入(“输入第一个数字:”)
num1=CType(Console.ReadLine(),双精度)
控制台。写入(“输入第二个数字:”)
num2=CType(Console.ReadLine(),双精度)
控制台。写入(“输入运算符:”)
op=ChrW(Console.Read())
选择案例op
大小写“+”
ans=num1+num2
Console.WriteLine(“Result=“+ans.ToString())
案例“-”
ans=num1-num2
Console.WriteLine(“Result=“+ans.ToString())
案例“*”
ans=num1*num2
Console.WriteLine(“Result=“+ans.ToString())
案例“/”
如果num2为0,那么
ans=num1/num2
Console.WriteLine(“Result=“+ans.ToString())
Else:Console.WriteLine(“错误:除零”)
如果结束
结束选择
Console.ReadKey()

我试过使用您的代码,但将“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
Sub-Main()
将num1变暗为双精度
双精度num2
作为字符的Dim op
双倍
控制台。写入(“输入第一个数字:”)
num1=CType(Console.ReadLine(),双精度)
控制台。写入(“输入第二个数字:”)
num2=CType(Console.ReadLine(),双精度)
控制台。写入(“输入运算符:”)
op=Console.ReadLine()
选择案例op
大小写“+”
ans=num1+num2
Console.WriteLine(“Result=“+ans.ToString())
案例“-”
ans=num1-num2
Console.WriteLine(“Result=“+ans.ToString())
案例“*”
ans=num1*num2
Console.WriteLine(“Result=“+ans.ToString())
案例“/”
如果num2为0,那么
ans=num1/num2
Console.WriteLine(“Result=“+ans.ToString())
Else:Console.WriteLine(“错误:除零”)
如果结束
结束选择
Console.Read()
端接头

我假设您没有收到任何类型的错误消息?如果您尝试
Console.ReadLine()
而不是只尝试
Console.Read(),会发生什么情况?
@Kjartan没有错误消息。使用Console.ReadLine()对它没有影响,即它仍然不会等待。@jim oneil确切地说,我得到13和10。这是否意味着每次使用Console.Read()进行输入时,我都必须编写Console.Read()两次?谢谢是的,假设你正在用另一个读数跟踪它,并且你不关心CR/LF。我没有看到刷新类型的方法。当然,您可以使用ReadLine或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()
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