我可以在if语句中使用“x = 2”作为参数吗?

时间:2014-02-12 00:56:05

标签: c++ computer-science

所以我刚刚接受了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 ++运行代码并且它给了我语法错误,建议我在括号中添加括号。是不是有些编译器更挑剔?

1 个答案:

答案 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。