void main()
{
int i=4,j=12;
if(i=5 && j>5)
printf("Hi!");
else
printf("Hello!");
}
首先,上面代碼的輸出是Hi!。根據我的說法,它應該顯示一個語法錯誤,因爲i = 5是一個assingment operator not i == 5 if我== 5然後它也是假的,應該打印你好,但它怎麼能打印嗨?if else condition with and operator
void main()
{
int i=4,j=12;
if(i=5 && j>5)
printf("Hi!");
else
printf("Hello!");
}
首先,上面代碼的輸出是Hi!。根據我的說法,它應該顯示一個語法錯誤,因爲i = 5是一個assingment operator not i == 5 if我== 5然後它也是假的,應該打印你好,但它怎麼能打印嗨?if else condition with and operator
i=5
是一個非常有效的表達式,可以放入條件式中,即使它不是對等式的測試。該分配產生的值不爲零,因此條件仍然正確。
然而編譯器會發出警告...... –
@EugeneSh。一些編譯器會。雖然沒有保證。 –
請注意,由於運算符的優先級,「i = 5」不在OP代碼中評估;而'5 && j> 5'的結果被分配給'i'。 –
在if語句
if(i=5 && j>5)
的條件等價於
if(i = (5 && j>5))
正如圖5是不等於0和j是確實大於5,則表達式(5 && j>5)
的計算結果爲1
和是分配給變量i
。
從C標準(6.5.16賦值運算符)
3賦值運算符存儲在由 左操作數所指定的對象的值。 賦值表達式具有左 操作數的值分配後...
所以作爲可變i
的值等於1
那麼如果執行條件。
看來你的意思是
if(i==5 && j>5)
^^^^
考慮到,根據C標準不帶參數的功能主要應聲明如下
int main(void)
適合指出可能是分配給'i'的意外值。 –
可以在條件參數賦值的變量,比如
帳戶While((a=b)!=null){
...
)
嘗試輸出每個變量(i,j)看看發生了什麼
'!!(i = 5)== true'這就是爲什麼。 – 0andriy
爲什麼你忽略編譯器警告?如果你的編譯器不警告,立即得到一個現代編譯器!正如你所說:「'='是一個賦值**運算符**」 – Olaf