namespace Ch05Ex03
{
    enum orientation : byte
    {
        north = 1,
        south = 2,
        east = 3,
        west = 4
    }    struct route
    {
        public orientation direction;
        public double distance;
    }    class Program
    {
        static void Main(string[] args)
        {
            route myRoute;
            int myDirection = -1;
            double myDistance;
            Console.WriteLine("1) North\n2) South\n3) East\n4) West");
            do
            {
                Console.WriteLine("Select a direction:");
                myDirection = Convert.ToInt32(Console.ReadLine());
            }
            while ((myDirection < 1) || (myDirection > 4));
            Console.WriteLine("Input a distance:");
            myDistance = Convert.ToDouble(Console.ReadLine());
            myRoute.direction = (orientation)myDirection;
            myRoute.distance = myDistance;
            Console.WriteLine("myRoute specifies a direction of {0} and a " +
               "distance of {1}", myRoute.direction, myRoute.distance);
            Console.ReadKey();
        }
    }
}不知道那个值为什么是-1?我觉得没有也行阿...请指教下,谢谢咯!

解决方案 »

  1.   

    不好意思啊,没表达清楚。
    int myDirection = -1;为什么一定得是-1呢?
      

  2.   

    while ((myDirection < 1) || (myDirection > 4))这里不是有判断吗,初始当然要赋在这个范围,当然C#你不赋值好像自动会赋0的,但这样做更好,一般都这样
      

  3.   

    可使用可空类型int? i=null;
    默认为0
      

  4.   


    编译是可以通過的,不過習慣是先赋值,int 默认为0,但不赋值這0為32位,還是64位要看當前應用機了,是有區別的。所以先赋值是好習慣。
      

  5.   

    上面说的很清楚了,1234表示东南西北,之所以要-1(当然后可以是更小的数)是为了保证在用户输入前该变量处于一个无效的值,因为如果你使用默认的0,则在while条件判断中0为合法值但又不对应上面的东南西北的某个值,后面的处理代码很可能会出错!如果你可以将条件改为while ((myDirection <=0) || (myDirection > 4))就不用非得是计较为什么非得是-1了!
      

  6.   


    则在while条件判断中0将被判断为真,从而跳出循环往下执行,而myDirection又不对应上面的东南西北的某个值
      

  7.   

    .net CLR要保证类型安全 否则不能编译通过