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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 FrancisTan 于 2014-7-9 08:00 编辑
  1. static void Main(string[] args)
  2. {
  3.        Console.WriteLine("请输入一个数字:");
  4.       
  5.        int num = 0; //接收键盘输入的值
  6.        bool isNumOrNot = false; //标记输入的值是否为数字

  7.        while(!isNumOrNot)
  8.        {
  9.               try
  10.               {
  11.                      num = Convert.ToInt32(Console.ReadLine());
  12.                      isNumOrNot = true;
  13.               }
  14.       
  15.               catch
  16.               {
  17.                      Console.WriteLine("您的输入有误,请重新输入!");
  18.                      isNumOrNot = false;
  19.                      Console.ReadKey();
  20.                      Console.Clear();
  21.               }
  22.         }
复制代码

这是在视频中跟老师学的一段代码,它解决了我对输入控制的困惑。
在这之前遇到那种要求输入值的题目时,就觉得很疑惑,题目要求输入数字或者字母,
那万一要是输入错误呢?答案显而易见的,程序执行错误。
那时候就在想是不是能有一种方法能解决这个问题,果然,坚持看下去就找到了。

记得老师说过,这样的代码才比较安全。
我的理解就是让程序有了自我检测的功能,能让它更加健状。

鉴于这个方法比较常用,老师还推荐我们将它封装成一个方法,用来从键盘输入整数。
下面是我自己封装的代码:
  1. public int ReadInt()
  2. {
  3.        int num = 0;
  4.        bool isNumOrNot = false;

  5.        while(!isNumOrNot)
  6.        {
  7.               try
  8.               {
  9.                      num = Convert.ToInt32(Console.ReadLine());
  10.                      isNumOrNot = true;
  11.                }
  12.                catch
  13.                {
  14.                       Console.WriteLine("输入有误,请重新输入!");
  15.                       isNumOrNot = false;
  16.                       Console.ReadKey();
  17.                }
  18.        }
  19.       
  20.         return num;
  21. }
复制代码


以后再需要从键盘输入一个数字的时候,就不用再去重复写这段代码了,可以直接重用了,非常方便。

17 个回复

正序浏览
最好不要使用try catch 来判断用户的输入是否正确,应该使用 int.TryParse(strs,out ints),如果转换成功会返回true。double,DateTime等值类型都有这个方法。。。
回复 使用道具 举报

没事,要记住了
回复 使用道具 举报
czwanglei 发表于 2014-7-8 23:58
你好,当有人回复后,请及时把帖子编辑为提问结束,这样,版主才给你加技术分
...

哦,谢谢你了
回复 使用道具 举报
你好,当有人回复后,请及时把帖子编辑为提问结束,这样,版主才给你加技术分
回复 使用道具 举报
cleader 发表于 2014-7-7 18:20
我感觉while()可以换成do while().
这里开头用while()没什么用,但是也不会出错,只是少了一次判断。
从理 ...

蒽,好建议,现在我也知道这东西是不能乱用的了哈哈,不过还是蛮有用的!
回复 使用道具 举报
我感觉while()可以换成do while().
这里开头用while()没什么用,但是也不会出错,只是少了一次判断。
从理论上说会更快一点点。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
非常好,引用一下
回复 使用道具 举报
continue  发表于 2014-7-5 17:06
这段代码给你的建议,可以尝试用 int.TryParse 来做

哎呀,这个东西没见过耶前辈,不懂!
我只是把从视频中学到的东西写出来,以巩固自己所学,很有效哦!
回复 使用道具 举报

谢谢老师给的鼓励分,我会努力学习的!
回复 使用道具 举报
这段代码给你的建议,可以尝试用 int.TryParse 来做
回复 使用道具 举报
给一分鼓励分。
回复 使用道具 举报
坐下来喝杯茶水,继续聊
回复 使用道具 举报
占个位置,先看看
回复 使用道具 举报
FrancisTan 发表于 2014-7-4 20:17
蒽,谢谢,我正在这样做,就是不知道合不合格,呵呵
不过这个流程还是挺有意思的,写完几篇后,比看几个 ...

但是blog不是写在这的呀。写到新浪,163,csdn,博客园这些地方~
回复 使用道具 举报
{:3_46:}小伙伴习惯很好啊
回复 使用道具 举报
向晓伟 发表于 2014-7-4 20:06
后面要写10篇blog 你可以把这些写到blog里面。当作学习的历程!

蒽,谢谢,我正在这样做,就是不知道合不合格,呵呵
不过这个流程还是挺有意思的,写完几篇后,比看几个小时视频收获都大!
看视频会头痛,写这个老精神了不犯困。
对了,你也是在准备报名吗?
回复 使用道具 举报
后面要写10篇blog 你可以把这些写到blog里面。当作学习的历程!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马