日期:2014-05-17  浏览次数:21475 次

在c#中关于闪退的问题
  class Program
    {
        static void Main(string[] args)
        {
            swaper s = new swaper();
            【1】int a = Convert.ToInt32(Console.ReadLine());
            【2】int b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("调用前的实参的值:{0},{1}",a,b);
            s.swap(ref a, ref b);
            Console.WriteLine("调用完后,实参的值:{0},{1}", a, b);
            Console.Read();
           
        }
    }
我只是取了了主函数,关于里面的函数调用,我没有写出来,我想问的是,为什么我将1和2处的console.readLine改为console.read虽然他仍然可以执行,但是当我输入a和b的值后,回车却会闪退?什么原因?  (我用的是c#的控制台程序)

------解决方案--------------------
你debug一下不久晓得了.外面加个try catch 看下异常.是不是你输入的非数字了?
------解决方案--------------------
原因很简单,ReadLine是以回车为结束符的,你第一次的输入应该是这样的:数字1->回车->数字2->回车
这样,a=数字1,b=数字2

而Read不以回车为结束符,实际情况就变成了a=数字1,b=13,也就是b把回车符读取了,那么当你再输入数字2的时候,相当赋给了第三个Read
------解决方案--------------------
引用:
原因很简单,ReadLine是以回车为结束符的,你第一次的输入应该是这样的:数字1->回车->数字2->回车
这样,a=数字1,b=数字2

而Read不以回车为结束符,实际情况就变成了a=数字1,b=13,也就是b把回车符读取了,那么当你再输入数字2的时候,相当赋给了第三个Read