有人可以解释为什么表达式(我研究C)喜欢
while(a!=1 || b!=1 || c!=1)
Run Code Online (Sandbox Code Playgroud)
引起问题.
特别是我有这个特定的代码:
while (ch != '\n' || ch != '\t' || ch != ' ') { ... }
Run Code Online (Sandbox Code Playgroud)
更新:根据你的其他评论,你的表达是错误的 - 它与"while"有多个条件无关.
ch != '\n' || ch != ' '
无论角色是什么,总是如此.
如果字符不是空格,则第二个条件为真,因此OR为真.
如果字符是空格,则第一个条件为真(因为空格不是换行符)并且OR为真.
正确的方法是 ch != '\n' && ch != ' ' ...
老答案:
在正常情况下,上面的表达式没有任何问题(假设您想要这样做).
与你的唯一问题是它有时可能不是最佳的(例如,如果b和c在整个循环中永远不会改变,在这种情况下你需要缓存b!=1
变量中的值).
while
多个条件可能在一种情况下有问题 - 如果这些多个条件实际上有预期的副作用.
这是由于||的惰性评估 和C中的&&,如果第一个表达式为真,则不会对其余表达式进行求值,因此不会发生副作用.