Console.Read被忽略了

时间:2012-04-25 15:31:44

标签: c#

我是C#语言的新手,并且刚刚开始学习它在XNA Game Studio for X-box上使用。

我对Java和C ++有一些小经验,所以我不是一个全面的菜鸟。这就是为什么这个问题对我来说太令人沮丧了。

我创建了一个简单的代码,用于添加用户输入的两个数字。非常简单的东西,但对于我感觉的任何新语言来说都是迈出良好的第一步。

我已经声明了我的变量,并且正在尝试使用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);

        }
    }
}

样品运行:

请输入要添加的第一个号码:

2

请输入要添加的第二个号码:

这两个数字的总和是:63


请输入要添加的第一个号码:

3

请输入要添加的第二个号码:

这两个数字的总和是:64


它继续这样,就像第二个数字是61一样。

提前感谢您的帮助!

8 个答案:

答案 0 :(得分:11)

那是因为它正在从控制台读取下一个字符,然后将其转换为int,它提供ASCII值,而不是数值。因此输入2将被解释为字符'2',使用ascii代码50.请尝试改为:

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

答案 1 :(得分:8)

Console.Read读取一个字符。因此,当您输入“2”并按Enter键时,您将提供(1)字符“2”,其ASCII值为50,然后(2)回车符,其ASCII值为13。这些是...... 63.: - )

答案 2 :(得分:3)

除了Gareth所说的,也许MSDN信息会清除为什么它不等待你在第二个Console.Read()方法上的输入:

Console.Read()

  

当您键入输入字符时,Read方法会阻止其返回;按Enter键时它会终止。按Enter键会将与平台相关的行终止序列附加到输入中(例如,Windows附加回车换行符序列)。 对Read方法的后续调用一次检索输入一个字符。检索到最后一个字符后,Read会再次阻止其返回并重复循环。

所以,在你第一次阅读()时,很高兴你可以输入你想要的任何内容,直到你按Enter键

然后,它到达第二个Console.Read()并说,“嘿,我已经从第一个Console.Read()中获得了那些字符。只是碰巧第二个是空白(运输)返回)“并将空白ASCII值分配给secondNumber。

答案 3 :(得分:1)

问题是Console.Read()读取第一个Return按键并将其发送到第二个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());

答案 4 :(得分:1)

Console.Read从输入块中读取单个字符。如果输入一个数字然后按回车键,它将读取回车键或您输入的第一个数字的下一个数字。

您可能希望改用Console.ReadLine。

答案 5 :(得分:0)

我想你想要Console.ReadLine()方法

答案 6 :(得分:0)

您应该尝试使用Console.ReadLine();

答案 7 :(得分:0)

您可能希望ReadLine不读取为读取流中的下一个字符,但ReadLine将等待用户按Enter键。

如果您的用户第一次输入34,这会导致错误,因为firstNumber等于3而不是34。