如果数组太大,我如何从数组中读取数据.....

时间:2017-07-06 13:23:35

标签: c arrays algorithm data-structures

如何只读取那些包含来自以下数组的数据值的单元格。 sample array

这是我的代码作为示例显示值,但是它读取所有单元格以仅检索4个值。如何避免这个包含零的位置?。随机位置可能存在数据,其余位置将为零。因此,有任何方法只能读取包含单元格的数据值。

#include<stdio.h>
void main()
{
    int i,data[500000]={25,0,0,0,0,98,0,0,13,0,857};
    for(i=0;i<500000;i++)
    {
        if(data[i]==0)
            continue;
        printf("%d\t",data[i]);
    }
}

1 个答案:

答案 0 :(得分:1)

啊,我想我现在明白了这个问题。我想你想知道如何在data[10]之后停止阅读,因为尽管你已经分配了50万个条目,但现在还没有填充所有这些元素。

请注意,我们假设“填充”的含义。 C没有空数组元素的概念。

在C中,将size变量与超大数组放在一起是很常见的。所以你可以做类似的事情:

int data[500000]={25,0,0,0,0,98,0,0,13,0,857};
int size = 11;
for(int i=0;i<size;i++) {
    if(data[i]==0) {
        continue;
    }
    printf("%d\t",data[i]);
}

(我已经为你的if区块添加了大括号 - 不要养成省略它们的习惯。

你似乎想要跳过零,我已经把它留在了。

添加元素时,您需要增加大小。

data[size] = newValue;
size++;

......或者在惯用的C ...中

data[size++] = newValue;

...你需要确保无论你的阵列有什么用,都要看长度。例如,你不能拥有一个函数findHighest(int data[]) -  它必须是findHighest(int data[], int size。当你在C学习中取得进步时,你会发现struct如何帮助你更加巧妙地实现这一目标。

此实例的一个示例是read系统调用:

int length = read(file, buf, count);

bufchar[]长度&lt; = countread()将读取一些字节,最多为count,并返回lengthbuf[0]buf[length-1]包含您要使用的字节。 buf[length]以后是垃圾。

另一种方法是确保数组中第一个不相关的值包含 sentinel值,表示“不再需要查看”。例如,如果您确定永远不会是有效值,则可以使用-1。一种非常简单的方法是在初始化时用-1 s填充数组(使用memset())。或者,每当延长长度时,请务必在data[index_of_last_value + 1]处写一个标记值。

标准C字符串处理函数是使用标记的代码示例。 NULL(零,'\0')表示字符串的结尾,通常存储在较长的缓冲区中。