黑马程序员技术交流社区

标题: 关于Console.ReadLine()方法使用的又一体验及疑问 [打印本页]

作者: 李后量    时间: 2012-5-16 22:30
标题: 关于Console.ReadLine()方法使用的又一体验及疑问
本帖最后由 李后量 于 2012-5-16 22:48 编辑

老规矩,先上代码
  1. static void Main(string[] args)
  2. {
  3. bool flag=false;
  4. do
  5. {
  6. Console.WriteLine("请输入一个正整数");
  7. string input=Console.ReadLine();           //声明
  8. if (input == "q")                                          // 第一个input
  9. {  
  10. break;
  11. }
  12. try
  13. {
  14. int numb = Convert.ToInt32(input);            //第二个input
  15. if (GetZhi(numb))                                           //GetZhi是一个判断该数是否为质数的方法,返回的是bool类型的值,是质数就返回true,不是就返回false。
  16. {
  17. Console.WriteLine(numb + "是质数");
  18. }
  19. else
  20. {
  21. Console.WriteLine(numb + "不是质数");
  22. }
  23. //Console.ReadKey();
  24. flag = true;

  25. }
  26. catch
  27. {
  28. Console.WriteLine("输入错误,请重新输入!");
  29. flag = true;
  30. }
  31. }
  32. while(flag);
  33. }
  34. static bool GetZhi(int a)
  35.         {
  36.             for (int i = 2; i < a; i++)
  37.             {
  38.                 if (a % i == 0)
  39.                 {
  40.                     return false;
  41.                 }
  42.             }
  43.             return true;
  44.         }
复制代码
很明显,我是要用户输入一个数(暂时不考虑是负数或超出Int的范围),然后判断该数是否为质数,如此循环。若代码如上,则执行正确;但若把上述代码中的input的声明去掉(粗体字部分),再把下面的两个input都用或部分用Console.ReadLine()代替,程序就会出错。

表现症状为:
1、声明保留,第一个input保留,把第二个input换成Console.ReadLine()时,输入内容的时候必须是两次,且第一次输入的内容无效,只读取第二次输入的(除了输入的是q的时候能一次正常退出)。
2、声明保留,第二个input保留,把第一个input换成Console.ReadLine()时,输入内容的时候必须是两次,且第二次输入的内容无效,只读取第一次输入的(当输入的是q的时候也需要输入两次,但只有当第二次输入的是q的时候才退出)。
3、不要声明,把input全用Console.ReadLine()代替,症状跟1中的一样。

我调试了几次,但都没能明白为什么会出现这种情况,希望同学们能为我解谜啊!!!!是VS每次遇到Console.ReadLine()的时候都会让用户输入一次吗?????求解释,越详细越好!

作者: 李海军    时间: 2012-5-16 23:09
本帖最后由 李海军 于 2012-5-17 10:03 编辑

Console.ReadLine()方法返回你输入的内容,每调用一次就会要你输入一次,如果不用变量来接受他的返回值,你就难以访问用户输入的内容.你把用户输入的内容用两个不同的变量接收一下看看怎样
作者: 王友伟    时间: 2012-5-16 23:24
第一个现象的原因:
        static void Main(string[] args)
        {
            bool flag = false;
            do
            {
                Console.WriteLine("请输入一个正整数");
                string input = Console.ReadLine();           //声明
                if (input == "q")                           // 第一个input
                {
                    break;
                }
                try
                {
                    int numb = Convert.ToInt32(Console.ReadLine());      //numb为第二次输入,这里的readline()并不是上一个,而是重新输入一个
                    if (GetZhi(numb))                        //GetZhi是一个判断该数是否为质数的方法,返回的是bool类型的值,是质数就返回true,不是就返回false。
                    {
                        Console.WriteLine(numb + "是质数");
                    }
                    else
                    {
                        Console.WriteLine(numb + "不是质数");
                    }
                    //Console.ReadKey();
                    flag = true;

                }
                catch
                {
                    Console.WriteLine("输入错误,请重新输入!");
                    flag = true;
                }
            }
            while (flag);
        }
        static bool GetZhi(int a)
        {
            for (int i = 2; i < a; i++)
            {
                if (a % i == 0)
                {
                    return false;
                }
            }
            return true;
        }

第二个现象原因:
static void Main(string[] args)
        {
            bool flag = false;
            do
            {
                Console.WriteLine("请输入一个正整数");
                string input = Console.ReadLine();           //声明
                if (Console.ReadLine() == "q")                           // 修改后
                {
                    break;
                }
                try
                {
                    int numb = Convert.ToInt32(input);      //上述程序中只将第一个readline()赋给了input,所以这里的input是第一次输入的值
                    if (GetZhi(numb))                        //GetZhi是一个判断该数是否为质数的方法,返回的是bool类型的值,是质数就返回true,不是就返回false。
                    {
                        Console.WriteLine(numb + "是质数");
                    }
                    else
                    {
                        Console.WriteLine(numb + "不是质数");
                    }
                    //Console.ReadKey();
                    flag = true;

                }
                catch
                {
                    Console.WriteLine("输入错误,请重新输入!");
                    flag = true;
                }
            }
            while (flag);
        }
        static bool GetZhi(int a)
        {
            for (int i = 2; i < a; i++)
            {
                if (a % i == 0)
                {
                    return false;
                }
            }
            return true;
        }

第三个现象:
static void Main(string[] args)
        {
            bool flag = false;
            do
            {
                Console.WriteLine("请输入一个正整数");
                Console.ReadLine();           //声明
                if (Console.ReadLine() == "q")                           // 修改后
                {
                    break;
                }
                try
                {
                    int numb = Convert.ToInt32(Console.ReadLine());      //原因同第一次一样,这里的Console.ReadLine()就是当前输入的值付给num,readline()定义一次就要输入一次值,建议你回头多看看基础视频教程
                    if (GetZhi(numb))                        //GetZhi是一个判断该数是否为质数的方法,返回的是bool类型的值,是质数就返回true,不是就返回false。
                    {
                        Console.WriteLine(numb + "是质数");
                    }
                    else
                    {
                        Console.WriteLine(numb + "不是质数");
                    }
                    //Console.ReadKey();
                    flag = true;

                }
                catch
                {
                    Console.WriteLine("输入错误,请重新输入!");
                    flag = true;
                }
            }
            while (flag);
        }
        static bool GetZhi(int a)
        {
            for (int i = 2; i < a; i++)
            {
                if (a % i == 0)
                {
                    return false;
                }
            }
            return true;
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2