2014-11-24 158 views
0

我有这样的代码:计算数组的大小

int main() { 
    int array[5]; 
    int x; 
    int n; 
    for(x = 0; x != 5; x++) { 
     scanf("%d", &n); 
     if(n % 2 == 0) { 
      array[x] = n; 
     } 
     printf("%d", sizeof(array)) 

我想知道有多少变量保存在数组中。

鉴于用户输入“2,3,5,6,7,8”,它只会得到“2,6,8”,有没有什么办法可以得到它的大小?我能做到这一点

一种方法是让另一个INT:

int main() { 
    int array[5]; 
    int x; 
    int g = 0; 
    int n; 
    for(x = 0; x != 5; x++) { 
     scanf("%d", &n); 
     if(n % 2 == 0) { 
      array[x] = n; 
      g++; 
     } 
     printf("%d", g); 

有没有办法做到这一点不增加g if块里面?

+0

'8' not get .... – BLUEPIXY 2014-11-24 22:47:03

+0

C是低级语言。它没有“没有价值”的变量的概念。你声明了一个5个整数的数组,它在内存中分配了5个实际位,并且这些位总是包含5个整数,但是因为你没有初始化数组,所以它们可能是随机的。如果你想要一个数据结构来记住有多少项目被放入它,你需要自己构建它,或者用像Python这样的更高级的语言编写它。 – 2014-11-24 22:47:16

+0

它不清楚你想要做什么 - 你想有多达5个偶数,并说有多少? - 或者你想要一个包含很多偶数的数组?你想要数组总是5? – pm100 2014-11-24 22:48:43

回答

0

你需要自己跟踪这个。

也许通过使用一个额外的变量(如你在第二个例子中显示),或由具有标记值,你可以数到(就像我们如何使用字符串的空字符)

1

你必须保持跟踪计数,否则你将不知道该阵列使用什么索引。因为你的偶数之间的阵列中留下空隙您当前的代码不工作:

for (x = 0; x != 5; x++) { 
     scanf("%d", &n); 
     if (n % 2 == 0) { 
      array[x] = n; 
      g++; 
     } 

对于输入“2 3 5 6 7”,则是在位置0中存储的数字2数组,第3位数字为6,其他位置有随机数据。它们甚至不是零值,因为你在函数内声明了数组。顺便说一下,一个固定大小的数组应该在全局范围内声明,在任何函数之外。这是因为函数内部的变量被分配在一个栈帧中,这是一个小而短暂的内存。你希望你的数组在堆上,这是一个很长而且很长的堆。

以下代码包含若干改进。它为数组的长度定义一个常量,并在保存数字之前检查当前计数。 (如果超出数组末尾写入,则会发生错误。)此外,此代码对读取的数据量没有固定的限制。它始终呼叫scanf,直到返回文件结尾值EOF

#include <stdio.h> 
#include <stdlib.h> 

#define MAX_COUNT 1000 

int even[MAX_COUNT]; 

int main() { 
    int x, 
     count = 0;     /* Track the number of even numbers. */ 
    while (scanf("%d", &x) != EOF) { /* Get an integer from standard input. */ 
    if(x % 2 == 0) {    /* Is it even?       */ 
     if (count == MAX_COUNT) {  /* If so, check the count first.  */ 
     printf("I have reached the limit of %d! I cannot store %d.", 
      MAX_COUNT, x);   /* Fail gracefully if the array is  */ 
     } else {      /* full. Otherwise, we can go   */ 
     even[count++] = x;   /* ahead and save the number.   */ 
     } 
    } 
    } 
    printf("There are %d even numbers.\n", count); 
    return 0; 
}