c - 编译器如何解释 `if(!(a=10))` ?

标签 c if-statement negation

我有一份家庭作业,我认为教授打错了字,输入了 if(!(a=10)) 而不是 if(!(a==10) )。然而,当被问及这是否是拼写错误时,她告诉我“假设方程是正确的并给出你的答案”。具体来说,作业是描述程序的行为:

#include <stdio.h>

int main() {
      int a = 100;
      while (1) {
          if (!(a=10)) {
              break;
          } 
      }
      return 0; 
}

如果攻击性代码为(!(a==10)),那么程序将进入if循环,到达break并退出两个循环,这对于 C 编程初级类(class)来说很有意义。

但是,如果代码确实要读取 (!(a=10)) 那么我不知道编译器会将其解释为什么意思。我确实知道代码可以编译,当您在 UNIX 中运行它时,它只允许您使用键盘输入您想要的任何内容,例如数字“7”,然后按 Enter 键,它会移动到新行,您可以输入“dog”,然后移至新行,如此下去,它永远不会退出回命令行。那么 (1) 编译器将如何解释 (!(a=10))? (2) 为什么程序允许您永远继续输入条目?

谢谢!

最佳答案

对于第一个问题, if( !(a=10) ){break;} 的含义是什么, 相当于

a = 10; if(!a) {break;}

对于 10 的值,!a 将是 0 并且它永远不会中断 while 循环。 在这个特定的示例中,如果您分配 if(!(a=0)),那么它将退出循环;

对于第二个问题,您的示例中没有代码。 但第一个问题的答案可以在这里扩展,因为循环永远不会中断,它会继续询问输入值。

关于c - 编译器如何解释 `if(!(a=10))` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68352028/

相关文章:

c - Malloc 二维数组始终为 NULL

ios - 生成一个介于 0 和 1 之间的随机 float

c - 如何将字符串复制到字符指针的中间

C# 字节处理

class - perl6 否定用户定义的字符类

Django 查询否定

c - 尝试使用 IFC 管道编写发布者-订阅者关系, fork 太多订阅者

javascript - 使用 javascript 在 html 表中生成每件商品的价格

VBScript 如果那么,尝试使用参数运行 exe

c - 扫描 char 并将 Switch 语句与 If 语句组合?开关(时间)