2014-10-30 59 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