1

C# 家庭作业问题:我正在创建一个控制台应用程序,它提示输入两个整数,提示执行哪个数学运算,并返回结果。我能够让它与我的两个硬编码操作数一起工作,现在我试图通过用户输入而不是硬编码变量来实例化两个单独的对象。我已将其简化为我遇到问题的准系统代码,我怀疑这个问题与我从同一方法创建两个对象的方式有关......但我不确定是什么.

这是我的主要课程...

 public class MainModule 
 {
    public static void Main(string[] args)
    {
         // get Operands
        Console.WriteLine("You Will Be Entering Two Integers.\n");
         //
        MathUI myOperand1 = new MathUI();
        int op1 = myOperand1.EnterInteger();
         //
        MathUI myOperand2 = new MathUI();
        int op2 = myOperand2.EnterInteger();

        Console.WriteLine("You chose {0} and {1}.", (int)op1, (int)op2);
        Console.ReadLine();
    }
 }

...以及接受输入的 MathUI 类。

public class MathUI
{
    public int EnterInteger()
    {
        Console.Write("Enter an integer: ");
        int enteredInteger = Console.Read();
        return (enteredInteger);
    }
}

当我执行程序时,我得到一个整数的提示。例如,我输入 3,这是我的输出。

You Will Be Entering Two Integers.

Enter an integer: 3
Enter an integer: You chose 51 and 13.

Math demo completed
Press <enter> to quit

当我输入第一个整​​数后按回车时,我会自动得到第二个整数;当我尝试输出整数值时,它们与我的输入不匹配。

这里发生了什么?我实例化的方式MathUI和我的两个操作数有什么问题吗?我是否只需要实例化一个实例,MathUI然后在该实例下声明两个变量?我也不确定为什么整数输出与我的输入不匹配。所有变量都被转换为int,所以我应该一直int通过,对吧?我尝试将它们转换为整数(int)op1--以防op1以某种内部形式保存...但不知道那里发生了什么。

我错过了什么?

4

3 回答 3

3

您需要将 Console.Read 设置为 Console.ReadLine,因为 readline 是由返回键触发的。

public class MathUI
{
    public int EnterInteger()
    {
        Console.Write("Enter an integer: ");
        int enteredInteger = Convert.ToInt32(Console.ReadLine());
        return (enteredInteger);
    }
}
于 2013-03-23T22:08:05.873 回答
1

使用Console.ReadLine而不是Console.Read. 使用Console.Read时,返回字符将作为输入传递给第二次Read调用。

另请注意,返回的 intConsole.Read不是解析数字,而是为您提供输入字符的 Unicode 字符值。这就是为什么你得到“错误”的数字。

您需要Console.ReadLine像这样使用和解析字符串结果:

        public class MathUI
        {
            public int EnterInteger()
            {
                Console.Write("Enter an integer: ");
                int enteredInteger = int.Parse(Console.ReadLine());
                return (enteredInteger);
            }
        }

其他几点供您考虑:

  • 无需在Console.WriteLine调用中强制转换值。
  • 您可以将MathUI类和EnterInteger方法设为静态。
于 2013-03-23T22:06:31.100 回答
1

问题是您正在使用Console.Read在按下任何键后返回值的方法。此外,它返回的结果是按键的ASCII值。在您的情况下,您按下3了十进制系统中的序数(ASCII)值为 51,然后按下ENTER了值为 13。如果您查看 MSDN 文档,Console.Read则返回一个整数。

要读取用户作为字符串输入的值,请使用Console.ReadLine方法。

如果您确实需要逐键读取,可以使用Convert.ToChar, 然后ToString方法将输入的键作为字符串。像这样:

string key = Convert.ToChar(Console.ReadLine()).ToString();

或者您可以使用以下代码读取实际操作数

int intOperand;
if (!int.TryParse(Console.ReadLine(), out intOperant))
    Console.WriteLine("You pressed non-numeric key");

于 2013-03-23T22:12:07.247 回答