搜索
查看: 585|回复: 7
打印 上一主题 下一主题

想到一个方法,再也不用担心用户输入的不是数字了

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-19 21:22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一个比较有个性的人,所以我总喜欢见到控制台就喜欢乱输入一番,不过这也令我想到:如果我的用户们跟我一样,输入数字的时候输入一些字母、特殊符号的话怎么办。
当然可以用代码:

[mw_shl_code=c,true]int a;
scanf ("%c", &a);
[/mw_shl_code]
的方法令用户不论输入是什么都可以接收到数字,但,有可能是用户不小心打错了,这将求出不一样的结果。所以,我想到了代码:
[mw_shl_code=c,true]
do {
    printf ("something.\n");
} while (scanf ("%d", &a) != 1);
[/mw_shl_code]

这个方法不错(自认为),但是为了通用起见,我写一个宏吧(至于到底可不可用就不要刨根了):
[mw_shl_code=c,true]
#define ATOME_INT_INPUT(say,get){\
    do {\
        printf ((say));\
    } while (scanf ("%d", (get)) != 1);
[/mw_shl_code]

但是,它真的不够通用,所以可以很自然地想到:
[mw_shl_code=c,true]

#define INPUT(say,get,n){\
    do {\
        printf ((say));\
    } while (scanf ((get)) != (n));
虽然这看起来比上一个代码乱了那么一点点,但至少是通用的。
看着这个宏,我默默的笑了。
沙发
发表于 2014-9-19 21:40:26 | 只看该作者
不清控制台第二段代码遇到非数字直接就是死循环

滥用宏不评价,想必你也知道
板凳
发表于 2014-9-19 22:22:13 | 只看该作者
  1. fflush(stdin);
复制代码
地板
发表于 2014-9-19 22:52:34 | 只看该作者
5#
发表于 2014-9-20 08:28:37 | 只看该作者

我知道
  1. while((c = getchar()) != '\n' && c != EOF);
复制代码
这样可以了吧
6#
发表于 2014-9-22 13:03:04 | 只看该作者
真无聊。。。
7#
 楼主| 发表于 2014-9-22 20:26:25 | 只看该作者
不清控制台第二段代码遇到非数字直接就是死循环
滥用宏不评价,想必你也知道

这……好吧,我承认我很菜……
8#
 楼主| 发表于 2014-9-22 20:30:43 | 只看该作者
不清控制台第二段代码遇到非数字直接就是死循环
滥用宏不评价,想必你也知道

不过,终于知道为什么会死循环了,呵呵……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表