所以我刚刚接受了CS101 C ++测验,这是其中一个问题:
int x=5;
if(x=2)
cout <<"this is true"<<endl;
else
cout <<"this is false"<<endl;
cout <<"this is all folks"<<endl;
给出了可能的输出
的以下选择a. this is true
b. this is false
c. this is true
this is false
d. this is true
this is all folks
e. None of the above
现在我注意到if语句正在测试一个赋值所以我圈了 e。)因为我认为输出应该是语法错误。我不认为作业不能被评价为真或假。导师标记我错了。原因是大于0的参数为真。我告诉教授,除非x = 2被圆括号包围,否则这是不可能的。 x = 2本身不是真或假。然后教师说我们不应该期望测试或测验上的代码可以运行逻辑正在测试而不是语法。但逻辑上x = 2既不是真的也不是假的,对吧???
我没有争论这些观点;我错了两个中只有一个。但是教练坚持认为测验问题写得正确并结束了对话。我不认为导师很感激我对此提出质疑......她非常粗鲁地把我拉了过来。无论如何我使用vim / g ++运行代码并且它给了我语法错误,建议我在括号中添加括号。是不是有些编译器更挑剔?
答案 0 :(得分:5)
是:int
转换为bool
:
if(x=2) //2 is non 0 converts to true
因此会打印this is true
。 A和D是唯一剩下的选择。而且因为
else
cout <<"this is false"<<endl;
cout <<"this is all folks"<<endl; //not included in `else`, will print no matter what
this is all folks
也会打印。
正确的答案是D。