2014-11-24 160 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; 
}