C语言中如何求数组真实存有数据的元素个数

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
int a[100];
int n;
int i;
int len;
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i] = i;
}
len = (sizeof(a)/sizeof(a[0])); printf("%d",len);
}

比如说,上面这个代码,输出的len永远是100。但是其真正储存了数据的是其中的前N个元素,如何求这个N

这个是比较容易解决的,这是我把楼主的程序略加修改后的代码:

# include <stdio.h>

# include <stdlib.h>

# include <time.h>

int main()

{

    int a[100];

    int n;

    int i;

    int len=0; //此行给len初始化;

scanf("%d",&n);

    for(i=0;i<n;i++)

    {

        a[i] = i;

++len; /*此处算是这个程序里面求数组a实际长度的要点了,

每循环一次,len的值就加1(从初始值0开始加的),所以当循环n次后,len就记下了数组的长度!*/

}

    //len = (sizeof(a)/sizeof(a[0]));因为只是为了让len表示数组a的值,所以为了求len不必采用这样的方法;

    printf("%d\n",len);//加个换行符输出时看的明显些;

}

这是我自己运行的结果,楼主可以自己运行着看看,这样输出的结果就是数组a的实际长度了:

楼主还有什么疑问可以尽情问,还有,以后若是想求一个数组的实际长度,且这个数组是字符数组时,楼主只需要在头文件中包含#include<string.h>后,就可以在求字符数组的实际长度时;用语句  int len;    //用于存储字符的实际长度;

            len=strlen(a),其中a是要求的字符数组的名称,不必加下标;很方便的,希望能帮到楼主哦。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
一般的话可以用一个变量
或者另外一个数组记录
当前用了几个(顺序加入顺序移除)
或者另外一个同大小的数组来记录到底用了哪几个(随机加入随机删除)
anything a[n];
int used[n];
memset(used,0, sizeof(int)*n);
a[i] = ..;used[i]=1;
这样统计used就可以了本回答被提问者和网友采纳
第2个回答  2013-06-19
如果没有给a[100]的后面的元素输入数据,后面的元素也是有数据的,只是数据是随机的。
当你定义a[100]时。系统已经随机分配了数据。不信你不要赋值输出来看看。所以按照你那么说是算不了的。
第3个回答  2013-06-19
你的意思是求数组中前n和非0元素个数?
相似回答