为什么我的输入始终采用默认值?

时间:2014-11-04 09:59:55

标签: c# .net visual-studio visual-studio-2012 default-value

这是我学习目的的代码......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Calculator
{
    abstract class calculator 
    {
        internal abstract int add();
        internal abstract int sub();
        internal abstract int mul();
        internal abstract int div();
        internal abstract double square();
        internal abstract double underroot();

    }
    class mycalculator : calculator
    {
        public mycalculator() :base()
        {
        }
        private int num1, num2;
        public int opr1
        {
            get { return num1; }
            set{num1 = value;}
        }

        public int opr2
        {
            get { return num2; }
            set { num2 = value; }
        }


        internal override int add() {
            return num1 + num2;
        }
        internal override int sub()
        {
            return num2 - num1;
        }
        internal override int mul()
        {
            return num1 * num2;
        }
        internal override int div()
        {
            if(num1 > num2){
            return num1 / num2;
            }else
            {
                //Console.WriteLine(num1 + " Must be greater than " + num2 + " and " + num2 + "can not be zero" );
                return 0;
            }
        }
        internal override double square()
        {
            return num1 * num1;
        }
        internal override double underroot()
        {
            return Math.Sqrt(num1);
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            char choice = 'y';

            while (choice == 'Y' || choice == 'y')
            {

                Console.WriteLine("\n\nPlease Select your Operation....!\n\n\n\n\n");
                Console.WriteLine("Press 1 for Addtion\n");
                Console.WriteLine("Press 2 for Subtraction\n");
                Console.WriteLine("Press 3 for Multiplication\n");
                Console.WriteLine("Press 4 for Division\n");
                Console.WriteLine("Press 5 for square\n");
                Console.WriteLine("Press 6 for UnderRoot\n");
                int opt;
                opt = Convert.ToInt32(Console.Read());
                mycalculator c = new mycalculator();

                switch (opt)
                {
                    case '1':
                        int a;
                        Console.WriteLine("Please Enter Your First Operand");
                        a = Convert.ToInt32(Console.Read());
                       // a = int.Parse(Console.ReadLine());
                        c.opr1 = a;
                        Console.WriteLine("Please Enter Your Second Operand");
                        c.opr2 = Convert.ToInt32(Console.Read());
                        Console.WriteLine(c.opr1 + " +  " + c.opr2 + "  = " + c.add());
                        break;




                    default:
                        Console.WriteLine("Invalid Choice");
                        break;

                }

                Console.WriteLine("\n\n\nDo you want to Perform more calculations??\n");
                Console.WriteLine("Press 'Y' or 'y' to continue, any other key to exit");
                choice = Console.ReadKey().KeyChar;
               // Console.WriteLine(choice);



            }
            Console.Read();

        }
    }
}

为了保持代码的大小,只省略了减法,乘法等的情况......

问题是: 当我按1添加两个数字时,它应该采用第一个操作数和第二个操作数,然后,它应该显示结果...但相反,它显示

13 + 10 = 23 

如果我为任何其他函数做,请说乘法显示

13*10 = 130

等等

13-10 = 3 

程序不要求我输入值,只显示假设操作数1为13的结果,操作数2为10 ....

我从来没有指明过类似的东西......

有人可以指出我这两个数字的哪一部分是自动提交???

立即诅咒c#和Visual Studio 2012 :(

outPut

4 个答案:

答案 0 :(得分:5)

我猜你正在打字' 1'然后按Enter键。 Enter键将回车符和换行符发送到您的程序。这两个字符的ASCII码分别为13和10。所以你实际上进入了13和10,即使你不知道它。

答案 1 :(得分:1)

您将opt定义为整数。

int opt;
opt = Convert.ToInt32(Console.ReadLine());

switch (opt)
{
    case '1':

 //...

然后你应该在交换机内检查整数值:

case 1:
// ....

希望它有所帮助。

答案 2 :(得分:1)

除了@Hans Kilian为纠正你的榜样所做的事情,你必须做以下事项 改变这个

opt = Convert.ToInt32(Console.Read());

opt = Convert.ToInt32(Console.ReadLine());

和这个

case '1': 

到这个

case 1: 

答案 3 :(得分:1)

你必须做的改变:

  1. opt = Convert.ToInt32(Console.Read());更改为opt = Convert.ToInt32(Console.ReadLine());

  2. case '1':更改为case 1: opt是整数而非字符

  3. a = Convert.ToInt32(Console.Read());更改为a = Convert.ToInt32(Console.ReadLine());

  4. c.opr2 = Convert.ToInt32(Console.Read());更改为c.opr2 = Convert.ToInt32(Console.ReadLine());

  5. 问题是当你按下1并点击输入Console.Read()从输入中读取\r(10)和\n(13)