2017-06-16 120 views
0

我有一個矩陣和一個struct與2 int變量。使用結構的矩陣

struct virus { 
int gen; 
int neighbours; 
} 

我想初始化我的全gen矩陣與1值。問題是它不適用於矩陣的第一列。 我會在代碼後發表聲明。 另外,當我試圖設置我的矩陣爲virus struct它不起作用,我不得不初始化一個新的矩陣,我稱之爲b。 這只是一個簡單的初始化和打印。

#include <stdio.h> 

struct virus { 
    int gen; 
    int neighbours; 
    }; 

void initGen(int n, int a[][100]) 
{ 
    struct virus b[n][100]; 

    int i,j; 
    for(i = 0; i < n; i++) 
    { 
     for(j = 0; j < n; j++) 
      { 
       b[i][j].gen = 1; 
      } 
    } 
} 

void printMatrixGen(int n, int b[][100]) 
{ 
    struct virus a[n][100]; 

    int i; 
    for(i = 0; i < n; i++) 
    { 
     int j; 
     for(j = 0; j < n; j++) 
      printf("%d\t", a[i][j].gen); 
     printf("\n"); 
    } 
} 

int main(void) 
{ 
    int a[100][100], n; 
    n = 4; 
    initGen(n,a); 
    printMatrixGen(n,a); 
    return 0; 
} 

輸出是矩陣

0 1 1 1 
0 1 1 1 
0 1 1 1 
0 1 1 1 

代替

1 1 1 1 
1 1 1 1 
1 1 1 1 
1 1 1 1 
+2

爲什麼你傳遞一個數組作爲參數,忽略它,然後初始化一個局部數組呢?這段代碼沒有任何意義,這就是你錯誤的原因。 – Lundin

+1

順便說一句:_it沒有工作_不是問題描述。你需要告訴我們實際發生了什麼以及你期望發生什麼。 –

+0

我剛剛編輯了代碼,並添加了程序給我的輸出和應該輸入的輸出。 –

回答

2

你的代碼傳遞錯誤的數組。您需要更改函數簽名如下:

void initGen(int n, struct virus a[][100]); 
void printMatrixGen(int n, struct virus a[][100]); 

此之後,刪除struct virus b陣列的本地聲明,並使用struct S作爲參數傳遞。

最後,聲明你struct陣列內main,並把它傳遞給這兩個函數:

struct virus a[100][100]; 
int n = 4; 
initGen(n, a); 
printMatrixGen(n, a); 
+0

偉大的幫助!謝謝!現在我明白我該如何利用結構來感謝你了。 –

+0

這個表達式:'struct virus a [100] [100],n = 4;'不正確,因爲它聲明變量'n'是'struct virus'的一個實例。建議將該表達式移動到一個新的行類似到:'int n = 4;' – user3629249

+0

@ user3629249非常感謝! – dasblinkenlight