黑马程序员技术交流社区

标题: 为什么我做只能输入1或2的方法输入错误不能继续提示输入 [打印本页]

作者: ?﹪滾妳媽丶    时间: 2014-3-22 08:42
标题: 为什么我做只能输入1或2的方法输入错误不能继续提示输入
本帖最后由 ?﹪滾妳媽丶 于 2014-3-23 12:42 编辑

static void Main(string[] args)
        {
            Console.WriteLine("请输入1或2");
            int jie = FangFa(1, 2);
            Console.ReadKey();

        }
        static int FangFa(int zhi, int shu)
        {
            while (true)
            {
                int ck = Convert.ToInt32(Console.ReadLine());
                if (ck < zhi || ck > shu)
                {
                    Console.WriteLine("只能输入{0}或{1}", zhi, shu);
                }
                return ck;
            }
        }
作者: Doublekill    时间: 2014-3-22 09:42

            while (true)
            {
                int ck = Convert.ToInt32(Console.ReadLine());
                if (ck < zhi || ck > shu)
                {
                    Console.WriteLine("只能输入{0}或{1}", zhi, shu);
                    continue;
                }
                return ck;
            }
加个continue就行。
作者: 回忆~坚    时间: 2014-3-22 10:05
本帖最后由 回忆~坚 于 2014-3-23 21:40 编辑

while (true)
            {
                int ck = Convert.ToInt32(Console.ReadLine());
                if (ck >= zhi && ck <= shu)
                {
                    return ck;
                }
                else
                    Console.WriteLine("只能输入{0}或{1}", zhi, shu);
            }
这样改也可以,你源代码的错误是在判断之后他还是会直接return ck,直接跳出了整个函数,所有不能继续循环。
作者: 鬼鬼    时间: 2014-3-22 10:22
因为你将return写入了循环体中,所以第一次执行到这里的时候函数就直接返回了。
跳过本次循环应该用continue,跳出循环体用break。
自己试着写了一个:
  1.         static int Func(int num1, int num2)
  2.         {
  3.             int num = 0;
  4.             do
  5.             {
  6.                 if (!int.TryParse(Console.ReadLine(), out num))
  7.                 {
  8.                     Console.WriteLine("只能输入{0}或{1}!", num1, num2);
  9.                     continue;
  10.                 }
  11.                 if (num != num1 && num != num2)
  12.                 {
  13.                     Console.WriteLine("只能输入{0}或{1}!", num1, num2);
  14.                 }
  15.             } while (num != num1 && num != num2);
  16.             return num;
  17.         }
复制代码

作者: zou5268237    时间: 2014-3-22 12:57
你把break放错地方了 这样无论输入什么都会直接跳出循环,可以在加个else把break放在里面,输入正确了再跳出循环:
  1.         static void Main(string[] args)
  2.         {
  3.             Console.WriteLine("请输入1或2");
  4.              int jie = FangFa(1, 2);
  5.              Console.ReadKey();
  6.         }
  7.         static int FangFa(int zhi, int shu)
  8.         {
  9.             while (true)
  10.             {
  11.                 int ck = Convert.ToInt32(Console.ReadLine());
  12.                 if (ck < zhi || ck > shu)
  13.                 {
  14.                     Console.WriteLine("只能输入{0}或{1}", zhi, shu);
  15.                 }
  16.                 else
  17.                 {
  18.                     return ck;
  19.                 }
  20.             }
  21.         }
复制代码

作者: czwanglei    时间: 2014-3-22 13:32
回忆~坚 发表于 2014-3-22 10:05
while (true)
            {
                int ck = Convert.ToInt32(Console.ReadLine());

你这是死循环,最好不要写死循环。。
作者: luoyilan222    时间: 2014-3-22 13:56
恩你将return写入了循环体中,所以执行一次到return ck;时候函数就直接返回了。

static int FangFa(int zhi, int shu)
        {
           int ck=0;
            while (true)
            {
                ck = Convert.ToInt32(Console.ReadLine());
                if (ck < zhi || ck > shu)
                {
                    Console.WriteLine("只能输入{0}或{1}", zhi, shu);
                }      
            }
            return ck;
        }
作者: 回忆~坚    时间: 2014-3-22 15:19
czwanglei 发表于 2014-3-22 13:32
你这是死循环,最好不要写死循环。。

不好意思啊,疏忽了,if判断里忘了放等号了,那条件改成 if(ck >=zhi && ck <=shu)就ok了···
作者: mdb    时间: 2014-3-22 16:01
本帖最后由 mdb 于 2014-3-22 16:03 编辑

  1. <P>    static int FangFa(int zhi, int shu)
  2.         {
  3.             bool isbreak=false;// 设置退出标志就能很好的控制是否结束循环</P>
  4. <P>            int ck =0;
  5.             while (!isbreak)
  6.             {
  7.                 Console.WriteLine("请输入1或2");
  8.                 ck = Convert.ToInt32(Console.ReadLine());
  9.                 if (ck < zhi || ck > shu)
  10.                 {
  11.                     Console.WriteLine("只能输入{0}或{1}", zhi, shu);
  12.                 }
  13.                 else isbreak=true;
  14.             }
  15.              return ck;
  16.         }</P>
复制代码

作者: czwanglei    时间: 2014-3-22 18:37
当有人给你评论时,请把帖子编辑为提问结束,这样我好给你技术分。。
作者: ?﹪滾妳媽丶    时间: 2014-3-22 22:23
czwanglei 发表于 2014-3-22 18:37
当有人给你评论时,请把帖子编辑为提问结束,这样我好给你技术分。。

怎么编辑提问结束啊,是发贴就发提问结束的贴吗?我是新手。。
作者: czwanglei    时间: 2014-3-22 23:02
发帖显示提问问题,有一个选项是编辑帖子,那里选择提问结束就好了。。。




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