using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication29
{  
    enum orientation : byte
       {
        north=1,
        south=2,
        east=3,
        west=4
    }
    struct route
    {
        public orientation direction;
        public double distance;
    }
    class Program
    {
     [STAThread]
        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);
     }
    
        }
    }
一直看不明白这个题的意思 包括显示结果的原理。尤其是红色不分一直想不明白这几个量究竟怎么回事 麻烦谁给指点下!

解决方案 »

  1.   

    myroute.direction=(orientation)mydirection; //给结构副值一个枚举类型
             myroute.distance=mydistance;   //给结构副值一个自己输入的值
      

  2.   

    这个题估计是为了演示枚举和结构的使用方法吧,就是让你输入一个方向和距离然后再把你的输入显示出来。
    至于红色部分
    myroute.direction=(orientation)mydirection; //int类型和枚举类型是互相可以强制转换的。枚举里的枚举值按照定义的顺序分别对应int型的0,1,2,3,....显示结果的原理和C++差不多,{n}就是占位符,显示时就把{n}替换成后面变量列表中的第n+1个变量的值建议你在细看看C#里的基本语法把
      

  3.   

    楼主看的是C入门经典(第三版)吧.我最近也在看这个.因为以前是学VB.NET的.
    myroute.direction=(orientation)mydirection; 
             myroute.distance=mydistance; 
    double mydistance; 是double的.把它转换成枚举型的orientation((orientation)mydirection这个就是类型转换),然后赋给结构的direction成员.
    第一句更简单就是把一个值赋给结构distance成员
      

  4.   

    myroute.direction=(orientation)mydirection //因为结构myroute的direction是orientation枚举类型,所以后面赋值的mydirection(int类型)需要类型转换
    myroute.distance=mydistance  //类型相同,无需转换,直接赋值
      

  5.   

     myroute.direction=(orientation)mydirection; 把mydirection显示转换为 orientation类型。
     并在结果中显示枚举的值,比如结果是1 就显示为 north 2就显示为south .. 等等 myroute.distance=mydistance; 
    就是把
     mydistance = Convert.ToDouble(Console.ReadLine()); 
    用户输入的数值,副给distance 
    其实在结果中显示的 "+"distance of {1}", 值,即是mydistance
     
      

  6.   

    这个题的意思是,输入行走的方向和距离,然后控制台显示出你的选择。上来定义了一个枚举类型orientation,里面四个成员分别为东南西北四个方向,并分别对应1,2,3,4四个值,这样输入1-4的整型数字即可获得相应的枚举值。然后定义了一个结构route,包含了orientation枚举类型的direction成员(表方向)和double类型的distance成员(表距离)。Main()中上来三行声明不用说了吧,然后控制台显示出提示信息,要求用户输入1-4的整数以确定方向。在do...while循环中,读取用户的输入并将其转换为整型值,如果用户输入了小于1或大于4的数字,则要求重新输入(进入新一轮循环);如果输入满足要求,则提示输入距离。同之前一样,读取用户的输入并将其转化为double类型值。接下来就是楼主红字的部分了。
    myroute.direction = (orientation)mydirection; 使用强制类型转换将整型值转换成orientation类型的枚举值,并将结果赋值给myroute的direction成员。因为mydirection已经被验证是1-4的整数,所以在进行强制转换以后,结果一定是orientation枚举中对应该整数值的那一项(north,south,east,west中的一个)。myroute.distance = mydistance; 更简单了,只是将用户输入的double类型的mydistance值赋值给myroute的distance成员。最后便是格式化输出了。
      

  7.   


    myroute.direction=(orientation)mydirection;输出枚举的名字
             myroute.distance=mydistance; 结构体的字段