为什么我的c!='o'|| c!='x'条件总是如此?

为什么我的c!='o'|| c!='x'条件总是如此?

我有这个循环语句,我将使用类似C的语法表达(C,C ++,Java,JavaScript,PHP等都使用类似的语法):

while (c != 'o' || c != 'x') {
    c = getANewValue();}

我想让它一直运行,直到我得到一个'o''x',但它永远不会退出,即使c'o''x'。为什么不?

我也尝试过使用if

if (c != 'o' || c != 'x') {
    // Show an error saying it must be either 'o' or 'x'}

但这也总是显示错误信息,即使c'o''x'。为什么?


天涯尽头无女友
浏览 535回答 3
3回答

暮色呼如

它必须if(c!='o' && c!='x')代替if(c!='o' || c!='x')。如果使用or运算符,则布尔表达式将始终为true。

白板的微信

这种情况(c != 'o' || c != 'x')永远不会是假的。如果c是'o',则为c != 'x'真,并满足OR条件。如果c是'x',则为c != 'o'真,并满足OR条件。你想要&&(AND),而不是||(OR):while (c != 'o' && c != 'x') {     // ...}“虽然c不是'o'和c不是''x'......”(例如,它们都不是)。或者使用De Morgan的法律,包括:while (!(c == 'o' || c == 'x')) {     // ...}“虽然这是不正确的(c是'o'或c为'x')......”

紫衣仙女

为什么我的c != 'o' || c != 'x'病情总是如此?该表达式使用逻辑OR运算符(||)组合了两个子表达式。表达式true是否至少有一个子表达式true。为了成为false它,它连接的两个子表达式必须是false。子表达式是c != 'o'和c != 'x'。第一子表达c != 'o'是false时c == 'o'。第二个相同; 它是false什么时候c == 'x'。请注意,他们不能false在同一时间,因为c不能'o'与'x'在同一时间。
打开App,查看更多内容
随时随地看视频慕课网APP