2017-07-06 103 views
-3

如何才能讀取那些包含來自以下數組的數據值的單元格。 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]); 
    } 
} 
+7

您的代碼表示不打印零。數組中只有四個值不爲零。你期望會發生什麼? – slim

+0

另外當你只用11個值初始化時,你爲什麼要使用'500000'? – slim

+0

如果你需要一個包含50萬個「int」值的數組,堆棧可能不是最好的地方。改用'malloc()'或'calloc()'。 –

回答

1

啊,我想我現在明白了這個問題。我想你想知道如何在data[10]之後停止閱讀,因爲儘管你已經分配了五十萬條目,但現在遠沒有滿足所有這些元素。

請注意,我們假設我們自己的「填充」的含義。 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++; 

...或者更簡潔慣用ç...

data[size++] = newValue; 

...,你需要確保無論您的陣列的作品,也看到長度。例如,你不能有一個功能findHighest(int data[]) - 它必須是findHighest(int data[], int size。當你在C研究中取得進步時,你會發現struct可以幫助你更好地實現這一目標。

的這個動作的一個例子是read系統調用:

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

buf是一個長度< = countchar[]read()將讀取最多count的一些字節數,並返回lengthbuf[0]buf[length-1]包含您要使用的字節。 buf[length]以上是垃圾。


另一種方法是,以確保數組中的第一不相關值包含指示「沒有更多的看到」 定點值。例如,您可以使用-1,如果您確定這永遠不會成爲有效的值。一個非常簡單的方法是在初始化時用-1 s填充陣列(使用memset())。或者,確保您在延長長度時在data[index_of_last_value + 1]處編寫標記值。

標準C字符串處理函數是使用標記的代碼示例。 NULL(零,'\0')指示字符串的結尾,該字符串通常存儲在較長的緩衝區中。