2017-12-18 81 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更新了答案以反映要求。 –