鑫花璐放 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条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料