2 zx349467221 zx349467221 于 2014.01.15 17:25 提问

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个回答

xuyyangaa
xuyyangaa   2014.01.17 09:28
已采纳

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

hzl1992
hzl1992   2014.01.20 16:31

原因如"国士_枫"所述,解决方法之一:
将order = (char)Console.Read();改为order = Console.ReadLine()[0];

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!