2012-04-25 217 views
9

我是新來的C#語言,並且只開始學習XNA Game Studio for X-box。Console.Read被忽略

我對Java和C++有一些小的經驗,所以我不是一個總的noob。這就是爲什麼這個問題對我來說太令人沮喪了。

我已經創建了一個簡單的代碼,旨在添加來自用戶的兩個數字輸入。非常簡單的東西,但是對於我感受的任何新語言來說,這是一個很好的第一步

我宣佈我的變量,並試圖使用Console.Read()從用戶添加數字。到目前爲止,代碼輸出我想要的消息,然後停止並從用戶讀入單個輸入。之後,它變得混亂起來。控制檯輸出下一條消息,讀取一些隨機數(無輸入),然後將它們加在一起並立即輸出。

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Add 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter the first number to add: "); 
      int firstNumber = Console.Read(); 

      Console.WriteLine("Please enter the second number to add: "); 
      int secondNumber = Console.Read(); 

      int Sum = firstNumber + secondNumber; 
      Console.WriteLine("The total of the two numbers is: " + Sum); 

     } 
    } 
} 

樣品試驗:

請輸入第一號補充:

請輸入第二個數字加:

這兩個數字的總和是:63


請輸入所述第一數量添加:

請輸入所述第二數量添加:

兩個數的合計爲:64


它繼續這樣做,就好像第二個數字是61.

在此先感謝您的幫助!

回答

11

這是因爲它正在從控制檯讀取下一個字符,然後將其轉換爲int,它給出了ASCII值,而不是數值。所以,鍵入2將被解釋爲字符「2」,ASCII碼50試試這個:

int firstNumber = Int32.Parse(Console.ReadLine()); 
+1

+1瞭解決問題的辦法,而不是隻有一個解釋 – Marc 2012-04-25 15:39:01

+0

謝謝你,我不知道它返回了ASCII碼 給其他人說使用Console.ReadLine(),我試過了,bu它返回了一個錯誤:不能同時將類型'字符串'轉換爲'int' 我想我會希望這可以工作。 XD 再次感謝您的詳細解釋! – 2012-04-25 15:39:16

+0

@米切爾托馬斯麥肯。但是這種使用'Int32.Parse'的方法不適合你? – Tudor 2012-04-25 15:41:08

6

Console.Read讀取單個字符。所以當你輸入「2」並按回車鍵時,你提供(1)字符'2',其ASCII值爲50,然後(2)回車字符,其ASCII值爲13。這些是... 63. :-)

+0

不知道關於ASCII。認爲它只是返回了在讀取空白符之前輸入的內容。謝謝! – 2012-04-25 15:41:49

+0

@MitchellThomasMcCann因爲它已經讓你失望了,所以我建議你快速瀏覽關於ASCII的維基百科文章,以及關於那篇文章的[參考表](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters)什麼字符映射到什麼ASCII碼。 (DEC和Glyph列在這裏相關) – Izkata 2012-04-25 20:42:20

0

您可能希望ReadLine不讀爲Read讀取流中的下一個字符,但ReadLine將等待用戶按Enter鍵。

如果您的用戶類型34中的第一時間這將導致一個錯誤,因爲firstNumber等於3不34.

1

的問題是,Console.Read()讀取第一返回按鍵和發送到所述第二Console.Read()呼叫。你的代碼應該使用ReadLine()來代替,而這個樣子:

Console.WriteLine("Please enter the first number to add: "); 
int firstNumber = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("Please enter the second number to add: "); 
int secondNumber = Convert.ToInt32(Console.ReadLine()); 
3

除了什麼加雷思說,也許MSDN信息將清理你爲什麼它沒有等待你輸入第二Console.Read ()方法:

Console.Read()

The Read method blocks its return while you type input characters; it terminates when you press the Enter key. Pressing Enter appends a platform-dependent line termination sequence to your input (for example, Windows appends a carriage return-linefeed sequence). Subsequent calls to the Read method retrieve your input one character at a time. After the final character is retrieved, Read blocks its return again and the cycle repeats.

所以,在您第一次閱讀()它高興地允許你輸入任何你想要,直到你^ h它輸入

然後,它到達第二個Console.Read()並說,「嘿,我已經有了第一個Console.Read()中的那些字符去通過。它只是發生在第二個是空格(回車)「,它將空白ASCII值賦給secondNumber。

+0

謝謝。不過,我讀到,但我認爲這意味着: 在首次調用時讀取整個字符串。 第二次通話時讀取單個號碼。 重複。 即,多次停止獲取數據。謝謝你的澄清! – 2012-04-25 15:50:23

1

Console.Read從輸入塊中讀取單個字符如果輸入一個數字,然後按回車鍵它會讀取回車鍵,或者您輸入的第一個號碼的一個數字。

你可能會希望使用到Console.ReadLine代替。