2013-08-20 93 views
0

以下C程序的預期輸出是打印數組中的元素。但是當實際運行時,它並不這樣做。程序不顯示預期的輸出

#include<stdio.h> 

    #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0])) 
    int array[] = {23,34,12,17,204,99,16}; 

    int main() 
    { 
     int d; 

     for(d=-1;d <= (TOTAL_ELEMENTS-2);d++) 
      printf("%d\n",array[d+1]);//printing the array 

     return 0; 
    }//looks simple but no result 

怎麼回事?爲什麼我沒有得到任何輸出?

回答

10

在比較

d <= (TOTAL_ELEMENTS-2) 

TOTAL_ELEMENTS具有類型size_t所以d被轉換成無符號的。對於例如sizeof(size_t)==4,這使得測試

0xffffffff < 5 

它失敗,導致循環退出。

如果你真的要開始你的循環計數器從-1

d <= (int)(TOTAL_ELEMENTS-2) 

會工作

+4

其實'TOTAL_ELEMENTS'有鍵入'size_t',這是* *一些實現定義的無符號的類型,而不是必須是'unsigned int'。但主要問題的確被正確描述。 – AnT

+0

This works:D .. – Abhishek

+1

@AndreyT謝謝,現在糾正 – simonc