我正在考虑在do..while()
循环结束时执行多OR条件,我不确定我是否正确行事。
我现在所拥有的内容如下:
do
{
(Insert code here)
}while(x != ('a' || 'e' || 'i' || 'o' || 'u');
这会起作用还是应该以不同的方式写出来?
答案 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');