唬人的 C 語言考題

可以拿去考別人對 C 語言的熟悉度喔 XD

剛才跟某個朋友聊 MSN,聊著就突然講到 C 語言去了,因為好人助教的職業病使然,我突然扮起壞人考了他這樣的題目:


int x = 0;
if (x = 0 || x == 0) printf("%dn", x);
printf("%dn", x);

請問這段正常的 C 語言程式碼會輸出什麼結果到螢幕上呢?

當然直接去 compile & run 就會知道答案了,不過你可以問問自己第一時間想到什麼答案 😛

  • 好機車 XDDD
    不過哪個傢伙 C 語言這樣寫
    就抓去當掉吧

  • GDX

    真的很機車…XD

  • 呵呵.. 這種 operators priority order
    出在考題沒幾個 programmer 會通過的.. 😀

    不過基本上 Logical Operator 優先權一定大於 Assignment Operator (大部份語言都是).
    如果改成以下會比較機車..

    if (x = ++x >>1 || x == 0) printf(“%dn”, x);

  • @Lian
    我想你拿去 compile 執行一下就知道答案了,
    謎底就留給想猜謎的朋友來猜好了 XD

  • @Lian
    防雷頁應該也夠長了…XD
    答案是
    1
    1

  • JonesLai


    int x = 0;
    if (x = (0 || (x == 0))) printf("%dn", x);
    printf("%dn", x);

  • JonesLai

    因為int x=0; 所以(x == 0) 為true,C語言true = 1,接著(0 || 1) 為 1 (!註 or 有1就1),再來x = 1 即 變數 x 載入 1,所以 x 內容為 1,只要把 if 括弧內依次判斷就可以知道為什麼,這個應該是考驗運算符號的先後次序關係,以及 = 與 == 粗心的問題。

  • Pingback: (依主題重組):電腦技術領域 « eweibookmark()