2014-10-30 56 views
-1

我的陣列是:計數在一個數組初始化的元素的數量[更新]

int array[100]; 

如果我初始化前n個元素(N < 100)的整數,包括0,其餘的是未初始化的,如何我計算n嗎?

我試圖用以下代碼一般的while循環:

int i = 0; 
int count = 0; 
while (a[i++]) 
    count++; 

然而,與這些碼的問題是,它不計數的值0的元素(它需要0作爲FALSE)。我如何克服這個問題?

UPDATE:下面是這個問題的背景

我有以下代碼:

int a[100]; 
int i; 
for (i = 0; i < 100; i++) 
    scanf("%d", &a[i]); 

如果非要輸入(只是一個例子):

1 0 1 0 1 * 

然後數組的前5個元素將是:1 0 1 0 1.其餘部分將被初始化。在這種情況下,如何計算這些初始化元素的數量以獲得5?

+5

沒有標準的方法來執行此操作。追溯初始化元素的數量要比追溯性地計算出來要好得多。 – 2014-10-30 07:43:45

+1

問題是,如果它是非空間的,它是垃圾,它也可能是一個整數。 – 2014-10-30 07:45:28

+0

也許你有一個XY問題。你想實現什麼?你真的談到初始化或簡單的任務嗎?編譯時是否知道初始值的數量?你需要數組的其餘部分,那些未初始化的元素? – 2014-10-30 07:59:22

回答

1

如果您不能簡單地記錄已初始化了多少個元素,那麼您需要使用「魔術」值,如INT_MIN(最大的負值int)來知道何時不使用某個元素。或者,而不是存儲int S,店是這樣的:

struct element { 
    int value; 
    int flags; // 0 means not used 
}; 

哦,多了一個想法:存儲在第一個元素初始化元素的個數。這有點像malloc()有效。然後,您可以使數組有101個元素,並將(array + 1, array[0])傳遞給需要大小爲100的數組的函數。

+0

感謝您的答案! – viethaihp291 2014-10-31 00:57:23