计算程序和console.read()输入流

时间:2015-09-06 15:58:35

标签: c#

下面的代码有问题吗?

using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1 = 0, num2 = 0, rslt = 0;
            char oprtr;

            Console.Write("Enter calculation: ");
            num1 = Convert.ToInt32(Console.Read());
            oprtr = Console.ReadKey().KeyChar;
            num2 = Convert.ToInt32(Console.Read());

            switch (oprtr)
            {
                case '+':
                    rslt = num1 + num2;
                    break;
                case '-':
                    rslt = num1 - num2;
                    break;
                case '*':
                    rslt = num1 * num2;
                    break;
                case '/':
                    rslt = num1 / num2;
                    break;
                default:
                    break;
            }
            Console.Write("rslt: {0}", rslt);
            Console.WriteLine();
            Console.ReadKey();
            return;
        }
    }
}

编译并运行后,结果为0

我的代码看起来没什么问题。

我不知道我的代码有什么问题

1 个答案:

答案 0 :(得分:1)

您需要使用Console.ReadLine()代替Console.Read()Console.Read()读取按下的键代码而不是值。

替换以下行

Console.Write("Enter calculation: ");
num1 = Convert.ToInt32(Console.Read());
oprtr = Console.ReadKey().KeyChar;
num2 = Convert.ToInt32(Console.Read());

Console.Write("Enter calculation");
Console.Write("\nEnter 1st Operand: ");
num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter Operator: ");
oprtr = Console.ReadKey().KeyChar;
Console.Write("\nEnter 2nd Operand: ");
num2 = Convert.ToInt32(Console.ReadLine());

编辑:

使用int.TryParse方法避免异常,因为如果用户按任何字母或特殊字符,则无法存储为整数。

实施例

int num1;
if (!int.TryParse(Console.ReadLine(), out num1)
{
    Console.WriteLine("Invalid Number");
}
else
{
    //num1 is ready for calculations
}

另外,你应该避免使用整数,因为对于除法,整数/整数=整数,i-e 5/2 = 2但它应该2.5