我有一份家庭作业,我认为教授打错了字,输入了 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/