2012-04-25 216 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代替。