0

我在链接逻辑运算符时遇到了一些麻烦。我确定我把事情搞砸了,但我没有看到。

我已经尝试了各种组合(比如在每个“不等于”操作周围添加括号等):

if (a != b && (a != EOF || b != EOF)) {
    /* Do stuff */
}

但没有任何效果。a并且b是从文件中读取的位fgetc,我可以提供更多代码。但由于这是关于链接逻辑运算符,我认为这已经足够了。

如果不明显,我希望 if 条件执行 ifabare different 但不是当其中一个 equals 时执行EOF

4

4 回答 4

2

翻译你对代码说的话:

// I want the if condition execute:
// if    a and b are different    but  not when one of them equals EOF
   if (  a != b                   &&   !   (a == EOF || b == EOF) )

然后应用 DeMorgan 规则,将 NOT 移到内部并将 OR 切换为 AND:

   if ( a != b  &&  a != EOF && b != EOF )
于 2021-05-27T18:51:49.337 回答
1

为了扩展 dbush 在评论中所说的内容,如果a与 不同b,并且a不是 EOF,也不是 EOF,您想要“做一些事情” b。这在代码中最简单地表示为

if( a != b && a != EOF && b != EOF)...

(请记住,这EOF是一个负值,不能存储在unsigned变量中。)

于 2021-05-27T18:45:35.713 回答
0

当您在编写条件时遇到问题时,首先尝试编写一个条件,该条件将绕过 if 语句的子语句。

对于您的 if 语句,错误条件将如下所示

a == b || a == EOF || b == EOF

然后用它的否定

if ( !( a == b || a == EOF || b == EOF ) )

现在它可以重写为

if ( !( a == b ) && !( a == EOF ) && !( b == EOF ) )

反过来看起来像

if ( a != b && a != EOF && b != EOF )
于 2021-05-27T19:03:04.033 回答
-1

试试( a!=b && a != EOF || a!=b && b!= EOF )

于 2021-05-27T18:48:16.080 回答