10

我是 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


就这样继续下去,就好像 secondNumber 是 61。

提前感谢您的帮助!

4

8 回答 8

11

这是因为它正在从控制台读取下一个字符,然后将其转换int为 ASCII 值,而不是数值。所以输入 2 将被解释为字符 '2',ascii 代码为 50。试试这个:

int firstNumber = Int32.Parse(Console.ReadLine());
于 2012-04-25T15:34:31.583 回答
8

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

于 2012-04-25T15:35:00.717 回答
3

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

Console.Read()

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

因此,在您的第一次 Read() 中,它很高兴允许您输入任何您想要的内容,直到您按 Enter

然后,它到达第二个 Console.Read() 并说:“嘿,我已经有了第一个 Console.Read() 中的那些字符要通过。恰好第二个是空格(回车)”并将该空白 ASCII 值分配给 secondNumber。

于 2012-04-25T15:41:02.473 回答
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());
于 2012-04-25T15:39:02.660 回答
1

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

您可能希望改用 Console.ReadLine。

于 2012-04-25T15:43:46.270 回答
0

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

于 2012-04-25T15:34:21.437 回答
0

你应该试试 Console.ReadLine();

于 2012-04-25T15:34:29.497 回答
0

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

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

于 2012-04-25T15:35:19.587 回答