2011-08-15 43 views
1

這個C程序的輸出應該是什麼?這個C程序的輸出

int main() 
{ 
    int x=1,y=1,z; 
    if (z=(y>0)) x=5; 
    printf("%d %d",x,z); 
    return 0; 
} 

正如所料,輸出是X是5和Z是1。這是因爲,當表達式y> 0的求它是真實的等等。現在的問題是在這個程序中:

int main() 
{ 
    int x,y; 
    for (y=1;(x=y)<10;y++) 
    ; 

    printf("%d %d",x,y); 
    return 0; 
} 

不應該輸出是一個無限循環?原因是,(x = y)總是返回true(1),總是小於10?

回答

7

否,(x=y)在將x設置爲y的值後返回新值。

但是,如果(x==y)相等則返回1,否則返回0。

+0

好的。得到它了。謝謝。 – Anon

2

x = y是一項任務,您將其混淆爲x == y。實際發生的是x需要y的值,然後將其與10進行比較,直到< 10條件停止爲真。

而在您的示例中,y == 1(最初)和x未初始化,因此x == y不一定爲真。

+0

謝謝。得到它了。 – Anon

+1

沒有這樣的東西,因爲沒有價值我是C.當第一次進入循環測試'x'未初始化時。 'x'的值可以是任何東西,包括10. – Flame

+0

哦,真的,我糾正了。謝謝。 – Vache

2

原因是因爲在某些時候y評估爲10被分配給x。賦值的值爲10,因此不小於10.循環終止。