如何格式化多个OR条件?

时间:2015-06-01 12:15:52

标签: c do-while logical-operators logical-or

我正在考虑在do..while()循环结束时执行多OR条件,我不确定我是否正确行事。

我现在所拥有的内容如下:

do
{
    (Insert code here)
}while(x != ('a' || 'e' || 'i' || 'o' || 'u');

这会起作用还是应该以不同的方式写出来?

4 个答案:

答案 0 :(得分:8)

作为其他答案中正确描述的明确个别测试的替代方法,您可能会发现使用strchr更简洁/更具表现力:

do
{
    ...
} while (strchr("aeiou", x) == NULL);

答案 1 :(得分:5)

那不会做你想要的。你真的想要:

do // note the lowercase d
{
    (Insert code here)
}while(x != 'a' && x != 'e' && x != 'i' && x != 'o' && x != 'u');

您可以使用括号使优先级明显,例如while((x != 'a') && (x != 'e'))

但是,如果经常进行这些检查并使用许多可能的字母,则应查看(位)集,并检查x是否在该集合中。 (编辑:或PaulR建议,strchr

编辑:你最初写的东西会做一些完全不同的事情。表达式

(x != ('a' || 'e' || 'i' || 'o' || 'u'))

首先评估!=的两边然后比较它们。左侧是x,而右侧是1||是二元运算符,如果它的左侧或右侧是1,则返回!=0。所以它会看到'a'!=0,并停止评估其他人(因为它已经可以计算结果,它会优化它)。所以条件实际上是while (x != 1)

答案 2 :(得分:2)

'a'表达式,其评估为非零。 (它实际上是小写字母a的ASCII值。)

因此'a' || 'b'也非零,依此类推。实际上,表达式'a' || 'e' || 'i' || 'o' || 'u'可能在编译时进行了评估:检查机器代码。

如果您需要针对一组字符文字测试x的值,那么您需要编写类似

的内容

x != 'a' && x != 'e' && x != 'i' && x != 'o' && x != 'u'

我个人倾向于构建一个函数isVowel,并将其用作while条件。这有助于提高可扩展性。

答案 3 :(得分:1)

不,这不会起作用,因为在您的代码中,('a' || 'e' || 'i' || 'o' || 'u')将首先评估返回布尔值,并且与x的比较没有任何意义。

我认为这就是你要做的事情

do
{
// (Insert code here)
}while(x!='a' && x!='e' && x!='i' && x!='o' && x!='u');
相关问题