我正在尝试打印出数组中的所有元素:
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之间在语法上没有区别所以我正在寻找一种方法或 hack 来实现这一目标:
10 9 0 3 4
而不是
10 9
数组也可能如下所示:{0,0,0,0}因此输出仍然需要为0 0 0 0。
有什么想法吗?
答案 0 :(得分:9)
不要使用也可能在数组中的值终止数组。
您需要找到 UNIQUE 终结符。
由于您没有在数组中指出任何负数,我建议您使用-1
终止:
int numbers[100] = {10, 9, 0, 3, 4, -1};
如果不起作用,请考虑:INT_MAX
或INT_MIN
。
作为最后的手段,编写一个序列值保证不在您的数组中,例如:-1, -2, -3
表示终止。
关于使用0
或\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]
}
答案 1 :(得分:0)
对于声明为
的数组int numbers[100] = {10, 9, 0, 3, 4};
绝对没有办法区分初始化程序中的显式0
和用于初始化数组尾部的隐式零。它们是相同的零。所以,你想要做的事情不能按字面意思完成。
您可以这样做的唯一方法是选择一些int
值作为保留的专用终结符值,并始终明确地将其添加到数组的末尾。即如果您选择-42
作为终结符值,则必须将其声明为
int numbers[100] = {10, 9, 0, 3, 4, -42};
并迭代到你的周期中的第一个-42
。
答案 2 :(得分:0)
实现这一目标的典型方法是:
请注意,第一项和第二项几乎相同。