2013-02-05 61 views
0

我有此代碼的問題:Ç - 如何插入一個整數值到一個數組

主:

#include <stdio.h> 
#include <stdlib.h> 
#include "Function.h" 
int main() 
{ 

int B[9]; 

saisie_B_M(&B[9]); 

return 0; 

} 

Function.c

void saisie_B_M(int B[9]) 
{ 

int i; 

for(i=0; i<8; i++) 
{ 
    printf("Une cellule morte ayant %d voisins sera t-elle morte ou vivante à la génération suivante ? \n", i); 
    scanf("%d", &B[i]); 
     } 
    } 

function.h

#ifndef Function_H_INCLUDED 
#define Function_H_INCLUDED 
void saisie_B_M(int B[9]); 
#endif // Function_H_INCLUDED 

原理很簡單,它是一個數組爲9,我只是在表格的每個單元格中返回一個值。但最後還是有一個錯誤,我不知道編譯器爲什麼不顯示消息。

+1

您是否嘗試過使用調試器? – nhahtdh

+0

您正在向saisie函數傳遞對int數組的第10個元素所在的內存空間的引用,如果它是10個元素的長度;修改它,所以你傳遞數組本身'saisie(B)' – ryanbwork

+0

是的,調試包括在代碼塊中,但他沒有發現錯誤和警告... –

回答

1

C中的數組是零索引的,所以B [9]的元素在0..8的範圍內。這是無效的:

saisie_B_M(&B[9]); 

,如果你想將指針傳遞到最後一個元素喲需要使用:

saisie_B_M(&B[8]); 

但似乎你需要完整的數組,所以傳遞& B [0 ](或簡單地B)到saisie_B_M函數。此外,您的 「for」 循環應該改成這樣:

for(i=0; i<9; i++) { 
/* ... */ 
} 
+1

忽略拼寫問題,您的第一個陳述是正確的,但您的解決方案忽略OP正在尋找的內容。 – user7116

+0

+1。我認爲OP只是想通過'B'。 –

4

問題是,當你與

saisie_B_M調用函數(& B [9]);

它應該是

saisie_B_M(B);

在第一種情況下,您給出一個數組,但是從第9個偏移量B[9]開始。所以你的函數將在9日,10日,11日,12日開始迭代......行爲是未定義的。

4

擴展在@Miguel Prz的回答,如果你想開始的第一個元素,那麼你就需要一個引用傳遞到陣列中的第一個元素:saisie_B_M(&B[0])或者你可以只使用saisie_B_M(B)

相關問題