2012-08-16 190 views
0

我剛剛在VS2010中開始使用VB,並試圖編寫一個簡單的控制檯計算器。但是,我無法讓它等待顯示輸出。即使放置Console.Read()後,控制檯窗口也會立即關閉。我猜從我的ReadLine()輸入緩衝區仍然有一些有效的字符。我會在這裏粘貼代碼:清除輸入緩衝區:Visual Basic

子的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()的,在代碼的結束,最終得到的控制檯等待。這是爲什麼發生?

+0

我假設你沒有收到任何類型的錯誤消息?如果您嘗試'Console.ReadLine()'而不是'Console.Read()?' – Kjartan 2012-08-16 07:49:33

+0

@Kjartan會發生什麼?沒有錯誤消息。使用Console.ReadLine()對它沒有影響,即它仍然不會等待。 – Karan 2012-08-16 12:25:15

回答

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(Dec:13)/ LF(Dec:10),然後像你想要的第三個塊。

Console.ReadLine不起作用,因爲它消耗CR/LF,並且沒有什麼可以阻止現有的應用程序。兩個Console.ReadLine來電或Console.ReadLine其次Console.Read會工作。

+0

@ jim-oneil準確地說,我得到13和10.那麼這是否意味着我必須在每次使用Console.Read()進行輸入時編寫Console.Read()兩次? 謝謝! – Karan 2012-08-17 18:23:39

+0

是的,假設你用另一個閱讀來跟蹤它,並且你不關心CR/LF。我沒有看到flush類型的方法。當然你可以使用ReadLine或者ReadKey來讀入操作符 – 2012-08-17 18:58:03