【发布时间】:2021-07-12 18:02:18
【问题描述】:
我有一个家庭作业,我相信教授打错了字,输入了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 编程的初级课程来说是有意义的。
但是,如果代码确实是要读取(!(a=10)),那么我不知道编译器会解释它是什么意思。我知道代码可以编译,当你在 UNIX 中运行它时,它只允许你使用键盘输入任何你想要的东西,比如说数字“7”,然后你按下回车键,它会移动到一个新的行,你可以输入“dog”,然后移动到一个新的行,然后继续,它永远不会退出回命令行。那么(1)编译器将如何解释(!(a=10))?以及(2)为什么程序允许您永远继续输入条目?
谢谢!
【问题讨论】:
-
输入的东西没有任何意义——Unix总是允许你输入东西并缓冲它,直到它稍后被读取。重要的是程序永远不会退出 - 它无限循环,因此您可以得出结论,
break;永远不会被占用。现在你必须弄清楚为什么不这样做。 -
提示:
a=10是一个表达式并且有一个值。那价值是什么?仔细阅读=运算符的工作原理。 -
!(a=10)将始终为false,在 C 中,除 0 之外的所有内容都被视为true和=将10分配给a。因此,您可以将其视为!10,即false。 -
我怀疑是错字。这是一个技巧问题。
-
@1Teaches2Learn:不,请参阅下面的答案。
标签: c if-statement negation