2017-02-21 101 views
-2

基本上做一个密码生成器。想过滤掉ASCII字符91-96 这里是我的if语句。我怎样才能缩短它使它像 “randomnumber == 91-96”而不必重复自己?如何缩短||代码在if语句中C++

if (randomnum == 91 || randomnum == 92 || randomnum == 93 || randomnum == 94 || randomnum == 95 || randomnum == 96) // We dont want values 91 - 96 
    { // Do nothing 
    } 
+7

'if(randumnum> = 91 && randomnum <= 96)' –

+1

就像酷家伙说的那样,退后一步,抽象出条件,然后用C表达它。如果你想让数字成为大于“a”**和**小于“b”,你就是这么写的。 – StoryTeller

+0

感谢:)工作 – IVIaximumPower

回答

0

既然要91和96之间滤掉ASCII字符,你可以做到这一点的方式如下:

if (randomnum >= 91 && randomnum <= 96) 
{ 
    // do stuff 
} 

这就缩短了代码相当。 & &用于检查字符是否小于或等于96 AND大于或等于91.这称为逻辑AND运算符。

编辑:以下@ PeteBecker的建议,这里是做if语句的一个更好的办法:

if (randomnum >= '[' && randomnum <= '`') // Notice that I use a char value here with the comparison operator 
{ 
    // do stuff 
} 

这里的区别是,randomnum是一个char变量,因此它是有道理的,我们只使用char值在我们的比较中。使用一个int值,就像上面的那样,也会将非ASCII值过滤为纯整数。虽然两种形式的if语句都可以工作,但比较运算符和char变量的用户char值更好。

另外,我从ASCII表中找到'['和'`';它的DEC值91和96分别指的是什么。

+0

请注意,这也会过滤掉91和96之间的**非** - ASCII字符。它对**值**进行操作,而不管它们的起源。 ASCII是映射值和显示字符的惯例。它不是整数值的基本属性。 –

+0

感谢您指出,@PeteBecker,我更新了我的帖子。 –

3
if (randomnum > 90 && randomnum < 97) // We dont want values 91 - 96 
{ // Do nothing 
} 
+0

辉煌! :)))) – Zefick

4

如果你想'Z''a'之间筛选出部分,

if (randomnum > 'Z' && randomnum < 'a') 

会更具可读性。