A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Doublekill 中级黑马   /  2014-3-15 21:07  /  990 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Doublekill 于 2014-3-16 07:22 编辑

while (true)
            {
                try
                {
                    int n = Convert.ToInt32(Console.ReadLine());
                    if (n % 2 !=0)//如果输入的是奇数
                    {
                        //上半三角
                        for (int j = 1; j <= n / 2 + 1; j++)
                        {
                            for (int k = 1; k <= (n / 2 + 1) - j; k++)
                            {
                                Console.Write(" ");
                            }
                            for (int m = 1; m <= 2 * j - 1; m++)
                            {
                                Console.Write("*");
                            }
                            Console.WriteLine();
                        }
                        //下半三角
                        for (int a = 1; a <= n % (n / 2 + 1); a++)
                        {
                            for (int b = 1; b <= a; b++)
                            {
                                Console.Write(" ");
                            }
                            for (int c = 2 * (n % (n / 2 + 1)) - a; c >= a; c--)
                            {
                                Console.Write("*");
                            }

                            Console.WriteLine();//换行输出
                        }
                    }
                    else
                    {
                        Console.WriteLine("必须输入奇数");
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误");//输入的不是数字
                    continue;
                }
                Console.ReadKey();  
            }
当第一次输入5,他显示5行。第二次在输入5就报错!!!怎么回事啊

5 个回复

倒序浏览
。。。
你把最后的console.readkey()去掉就好了
回复 使用道具 举报
原因就在于结尾的“Console.ReadKey();”,当你第二次输入5时,“Console.ReadKey();”读取了5,循环块首的“Console.ReadLine()”读到了换行符,导致“Convert.ToInt32()”转换失败,跳到了异常处理部分,自然会提示“输入有误”。
像这种死循环,已经没有必要为了程序暂停添加额外的“Console.ReadKey();”了,如二楼所述,将这行代码去掉就可以了。
回复 使用道具 举报
ReadKey前加句输出做标记...
回复 使用道具 举报
百川 发表于 2014-3-15 22:02
。。。
你把最后的console.readkey()去掉就好了

谢了,原来如此,
回复 使用道具 举报
本帖最后由 百川 于 2014-3-16 12:46 编辑
  1. int m = (n + 1) / 2;
  2.                         for (int j = 1; j <= n; j++)
  3.                         {
  4.                             for (int k = 1; k <= n; k++)
  5.                             {
  6.                                 if (Math.Abs(j-m)+Math.Abs(k-m)<m)//输出菱形
  7.                                 {
  8.                                     Console.Write("*");
  9.                                 }
  10.                                 else
  11.                                 {
  12.                                     Console.Write(" ");
  13.                                 }
  14.                             }
  15.                             Console.WriteLine();
  16.                         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马