1

可能重复:
nul 终止一个 int 数组

我正在尝试打印出数组中的所有元素:

int numbers[100] = {10, 9, 0, 3, 4};
printArray(numbers); 

使用此功能:

void printArray(int array[]) {
    int i=0;
    while(array[i]!='\0') {
        printf("%d ", array[i]);
        i++;
    }
    printf("\n");
}

问题是当然 C 不会区分数组中的另一个零元素和数组的末尾,之后它都是 0(也表示为 \0)。

我知道 0 和 \0 在语法上没有区别,所以我正在寻找一种方法或破解来实现这一点:

10 9 0 3 4

而不是这个

10 9

数组也可以如下所示:{0, 0, 0, 0} 所以当然输出仍然需要为 0 0 0 0。

有任何想法吗?

4

3 回答 3

9

不要使用也可能在数组中的值终止数组。

您需要找到一个唯一的终止符。

由于您没有在数组中指示任何负数,因此我建议以 终止-1

int numbers[100] = {10, 9, 0, 3, 4, -1};

如果这不起作用,请考虑:INT_MAXINT_MIN.

作为最后的手段,编写一个保证不在数组中的值序列-1, -2, -3,例如:表示终止。

0用or终止并没有什么“特别”之处\0。以适合您的情况的任何方式终止。


如果您的数组确实可以按任何顺序保存所有值,那么终止符是不可能的,您必须跟踪数组的长度。

从您的示例中,这看起来像:

int numbers[100] = {10, 9, 0, 3, 4};
int Count = 5;
int i;

for(i=0; i<Count; ++i)
{
    // do something with numbers[i]
}
于 2010-11-30T21:55:57.307 回答
0

实现这一点的典型方法是:

  • 定义一个哨兵值(其他人建议)
  • 用一个 int (实际值)和一个 bool (指示它是否是哨兵)定义一个结构,并改为创建一个数组
  • 用数组传递数组的长度
  • 定义一个包含数组和长度的结构并传递它

请注意,第一项和第二项几乎相同。

于 2010-11-30T22:18:50.860 回答
0

对于声明为的数组

int numbers[100] = {10, 9, 0, 3, 4};

绝对没有办法将初始化程序中的显式0与用于初始化数组尾部的隐式零区分开来。它们是相同的零。所以,你想做的事不能按字面意思去做。

您可以这样做的唯一方法是选择某个int值作为保留的专用终止符值,并始终将其显式添加到数组的末尾。即,如果您选择-42作为终止符值,则必须将其声明为

int numbers[100] = {10, 9, 0, 3, 4, -42};

并迭代到-42您的周期中的第一个。

于 2010-11-30T22:09:44.303 回答