Pai*_*els 0 c logical-operators do-while logical-or
我期待在do..while()循环结束时做一个多OR条件,我不确定我是否正确行事.
我现在所拥有的如下:
do
{
(Insert code here)
}while(x != ('a' || 'e' || 'i' || 'o' || 'u');
Run Code Online (Sandbox Code Playgroud)
这会起作用还是应该以不同的方式写出来?
作为在其他答案中正确描述的显式单个测试的替代方法,您可能会发现使用strchr更简洁/更具表现力:
do
{
...
} while (strchr("aeiou", x) == NULL);
Run Code Online (Sandbox Code Playgroud)
这不会做你想要的.你真的想要:
do // note the lowercase d
{
(Insert code here)
}while(x != 'a' && x != 'e' && x != 'i' && x != 'o' && x != 'u');
Run Code Online (Sandbox Code Playgroud)
您可以使用括号使优先级明显,例如while((x != 'a') && (x != 'e')).
但是,如果经常进行这些检查并使用许多可能的字母,则应查看(位)集,并检查x是否在该集中.(编辑:或PaulR建议,strchr)
编辑:你最初写的东西会做一些完全不同的事情.表达方式
(x != ('a' || 'e' || 'i' || 'o' || 'u'))
Run Code Online (Sandbox Code Playgroud)
首先评估双方!=然后比较它们.左边是x,而右边是1.||是一个二元运算符,1如果它的左侧或右侧是!=0,则返回它.所以它会看到'a'!=0,并停止评估其他人(因为它已经可以计算结果,它将优化它).所以条件实际上就是这样while (x != 1).