如何只读取那些包含来自以下数组的数据值的单元格。 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]);
}
}
答案 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);
buf
是char[]
长度&lt; = count
。 read()
将读取一些字节,最多为count
,并返回length
。 buf[0]
到buf[length-1]
包含您要使用的字节。 buf[length]
以后是垃圾。
另一种方法是确保数组中第一个不相关的值包含 sentinel值,表示“不再需要查看”。例如,如果您确定永远不会是有效值,则可以使用-1
。一种非常简单的方法是在初始化时用-1
s填充数组(使用memset()
)。或者,每当延长长度时,请务必在data[index_of_last_value + 1]
处写一个标记值。
标准C字符串处理函数是使用标记的代码示例。 NULL
(零,'\0'
)表示字符串的结尾,通常存储在较长的缓冲区中。