2017-12-18 80 views
0

我有學校作業,其中包括創建一個程序,該程序可以與Matrix進行數學運算。在這個程序中,我必須使用typedef創建Matrix使用數組插入所有已聲明的對象

This typedef should hold 4 x 4Matrix with double type。

因此,對於這個位置是我的實現:

typedef struct { 
    char * name; 
    double * data; 
    int elements; 
} mat; 

在主,我需要定義幾個mat對象是這樣的:

mat MAT_A, MAT_B, MAT_C, MAT_D, MAT_E, MAT_F; 

而這個用戶應該輸入的輸入,例如:add_mat mat_a,mat_b,mat_c , 此操作會將2 Matrixmat_amat_b添加到mat_c

所以之後,該用戶輸入與Comma\Tab拆呢,我想寫簡單的函數,得到了char這是必要的mat並返回相關mat

例如:

mat getmatrix(char name, mat *mats) 
{ 
    int i; 
    for (i = 0; i < 6; i++) 
    { 
     if (strcmp(mats[i].name, "MAT_A") == 0) 
     { 
      return mats[i]; 
     } 
    } 

    ..... 
} 

對於這一點,我插入我所有的墊物進入array

mat mats[] = { MAT_A, MAT_B, MAT_C, MAT_D, MAT_E, MAT_F }; 

但我得到這個錯誤我所有mat對象

未初始化的局部變量「MAT_A」使用

關於如何解決它也許找到另一種方式來讀取輸入的任何建議?

+0

任何建議如何解決它? =>代碼中沒有'MAT_A' => [mcve]。 – Stargateur

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤,以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。 – Stargateur

+1

如果矩陣大小是4x4,則使元素成爲指針沒有意義。只要在結構中加入「double data [4] [4];'就可以簡化很多事情。 – unwind

回答

0

你寫的方式,mats將包含副本 MAT_A等這不是你想要的。

你的getmatrix函數也返回一個矩陣的副本。你並不需要它(複製包含指針的結構是危險的,但請參見下文)。您可能想要通過指針返回矩陣,並且還通過指針接受所有函數中的矩陣參數。

我建議擺脫MAT_A和朋友,因爲你不需要他們。僅使用mats[i]。你需要指定mats元素的個數:

mat mats[10]; 

不要忘了初始化mats正常。

如果由於某些不合理的原因需要定義mat類型的10個左右不同的變量,則需要將mats更改爲指針數組(這裏的常見主題是指針,必須在各處使用它們) 。

mat* mats[] = { &MAT_A, &MAT_B, /* etc */ }; 

相應地改變getmatrix

要考慮的另一件事:如果你的矩陣維度是固定的,你使用的指針沒有理由。聲明double data[4][4]將大大簡化事情。關於name同樣的事情,可以考慮將其設置爲固定大小的字符數組。

+0

但問題是,我必須申報這MAT_A等,這是要求 –

+0

@DannyNitman你需要引用你的官方要求逐字,否則這將是相當困難的猜測他們。 –

+0

@DannyNitman更新了答案以反映要求。 –