用C计算数组中初始化元素的数量

时间:2014-10-30 07:41:42

标签: c

我的数组是:

int array[100];

如果我使用包含0的整数初始化前n个元素(n <100),其余元素未初始化,我该如何计算n?

我使用以下代码尝试了正常的while循环:

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

然而,这些代码的问题在于它不计算值0的元素(它将0视为FALSE)。我该如何克服这个问题?

更新:以下是此问题的背景

我有以下代码:

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?

1 个答案:

答案 0 :(得分:1)

如果你不能简单地记录已经初始化了多少元素,那么你需要使用像INT_MIN这样的“魔术”值(最大的负int)来知道元素何时不是用过的。或者,不是存储int,而是存储这样的内容:

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

哦,还有一个想法:在第一个元素中存储初始化元素的数量。这有点像malloc()有时如何运作。然后你可以让数组有101个元素,并将(array + 1, array[0])传递给期望大小为100的数组的函数。