2014-02-12 22 views
0

所以我只花了CS101 C++測驗,這是問題之一:我可以在if語句中使用「x = 2」作爲參數嗎?

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 ++運行代碼,它給了我語法錯誤,建議我在作業周圍放上括號。難道一些編譯器更挑剔?

+4

「我使用vim/g的跑++編寫代碼,它給了我語法錯誤」 - 一個*錯誤*,或者只是一個*警告*? – Matt

+1

是的,'g ++'不會給你一個錯誤,除非你在命令行指定'-Werror'。賦值是C中的表達式,所以'x = 2'在賦值之後的值爲'x',顯然是'2',這就是爲什麼你可以像'a = b = c = 2;' –

回答

5

是:intbool轉換:

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.

+0

僅僅是因爲asignment操作符在設置後返回lhs,所以'x = 2'返回'x',即'2',它是'非零',所以'int'被轉換爲一個臨時的'boolean'值是'true' –

+0

我明白了...所以我從編譯器的角度來看它。當它只是一個警告,我認爲這是一個錯誤,並且代碼會非常好地運行。多謝! – user3299549

相關問題