鑫花璐放 2014-01-15 09:25 采纳率: 33.3%
浏览 2502
已采纳

C#数组switch中的goto问题

在键盘上接收用户输入的15个整数数值,输入完成后,接收用户输入的指令,

如果用户输入a(大小写不区分)升序排列,如果输入d(大小写不区分)降序排列,否则提示

用户重新输入指令,输出排序前与排序后的数列内容。

下面是我的代码

namespace ConsoleApplication16
{ 
  class Program
  {
    static void Main(string[] args)
    {
        int[] arr = new int[15];
        Console.WriteLine("请输入15个整数");
        //初始化
        for (int i = 0; i < 15; ++i)
        {
            if (!int.TryParse(Console.ReadLine(), out arr[i]))
                Console.WriteLine("输入有误");
        }
        //复制原数组
        int[] arr1 = (int[])arr.Clone();
        //获取指令,根据指令调用函数
        Order:
        Console.WriteLine("请输入指令");
        char order;
        order = (char)Console.Read();
        switch (order)
        {
            case 'a': fun1(arr);
                break;
            case 'A': fun1(arr);
                break;
            case 'd': fun2(arr);
                break;
            case 'D': fun2(arr);
                break;
            default:
                Console.WriteLine("请重新输入指令");
                goto Order;
        }
        //打印原数组
        Console.Write("原序列为:");
        for (int i = 0; i < 15; ++i)
            Console.Write(arr1[i] + ",");
        Console.WriteLine();
        //打印新数组
        Console.Write("新序列为:");
        for (int i = 0; i < 15; ++i)
            Console.Write(arr[i] + ",");
        Console.WriteLine();
    }

    //a或者A指令
    public static void fun1(int[] arr)
    {
        for(int i = 0; i < 14; ++i)
            for(int j = 0; j < 14 - i; ++j)
            {
                int temp;
                if(arr[j] > arr[j+1])
                {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
    }
    //d或者D指令
    public static void fun2(int[] arr)
    {
        for(int i = 0; i < 14; ++i)
            for(int j = 0; j < 14 - i; ++j)
            {
                int temp;
                if(arr[j] < arr[j+1])
                {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
    }
}

}
下面是测试,请教指令输入那里为什么自动循环3次?
CSDN移动问答

  • 写回答

2条回答 默认 最新

  • 国士_枫 2014-01-17 01:28
    关注

    因为你用的是
    order = (char)Console.Read();
    它每次读取一个字符,第一次你输入 'e'然后按下回车换行,它输出"请重新输入指令"后 goto上去会读取回车字符,再goto上去读取换行字符,都读取结束了才会让你继续输入

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机