2015-12-07 134 views
0

我正在试图让一个程序从用户处获得两个矩阵的输入。然后将输入的数据传递给另一个函数,然后再进行计算。两个矩阵的总和被传递给第三个函数来打印输出。将两个二维数组传递给一个函数C++

我面临的问题是函数之间传递数组,否则代码的逻辑是好的。

我的代码的问题是我没有得到打印功能的输出。另外,add函数不会做任何计算,因为我认为数组中的数据没有通过。

难道有人请向我解释我传球时做错了什么。

const int MTRX_MAX = 3; 

//Function Prototypes 
void Get_Matrix(); //Ask the user for input 
void Add_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX], int sum[][MTRX_MAX]); //Calculates the sum of the matrecies 
void Print_Matrix(int matrix1 [][MTRX_MAX], int matrix2 [][MTRX_MAX]); //Printout the inputed data 

int main() 
{ 
    int matrix1[MTRX_MAX][MTRX_MAX]; 
    int matrix2[MTRX_MAX][MTRX_MAX]; 
    int sum[MTRX_MAX][MTRX_MAX]; 

    Get_Matrix(); 
    Add_Matrix(matrix1,matrix2,sum); 
    Print_Matrix(matrix1, matrix2,sum); 

    return 0; 
} 

//Function Definetions 
void Get_Matrix() 
{ 
    int matrix1[3][3] = { 0 }; 
    int matrix2[3][3] = { 0 }; 

    cout << "Enter the first Matrix: \n"; 

    for (int i = 0; i < MTRX_MAX; i++) 
    { 
     for (int j = 0; j < MTRX_MAX; j++) 
     { 
       cin >> matrix1[i][j]; 
     } 
    } 
    //////////////// 
    cout << "Enter the second Matrix: \n"; 

    for (int i = 0; i < MTRX_MAX; i++) 
    { 
     for (int j = 0; j < MTRX_MAX; j++) 
     { 
       cin >> matrix2[i][j]; 
     } 
    } 
} 

void Add_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX], int sum[][MTRX_MAX]) 
{ 
     for (int i = 0; i < 3; i++) 
     { 
       for (int j = 0; j < 3; j++) 
       { 
         sum[i][j] = matrix1[i][j] + matrix2[i][j]; 
       } 
     } 

} 

void Print_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX]) 
{ 
     for (int i = 0; i < MTRX_MAX; i++) 
     { 
       for (int new_line = 0; new_line < 1; new_line++) 
       { 
         for (int j = 0; j < MTRX_MAX; j++) 
         { 
           cout << sum[i][j] << " "; 
         } 
         cout << endl; 
       } 
     } 
} 

程序输出:

输入第一个矩阵:

输入第二个矩阵:

-1717986920 -17 17986920 -1717986920 -1717986920 -1717986920 -1717986920 -1717986920 -1717986920 -1717986920

按任意键继续。 。 。

+0

我建议你把你的矩阵放在一个结构体中,然后传递它,或者使用'std :: array'等等,它将会更容易处理。 –

+0

你好Neli我们还没有在课堂上学过Structs。你能向我解释如何使用它们或指导我发表一篇文章。 – ashumrani

+0

@ashumrani检查这里的数据结构,例如:http://www.cplusplus.com/doc/tutorial/structures/ –

回答

1

在评论:

for (int new_line = 0; new_line == 1; new_line++) //The condition 'new_line==1' doesn't really seems to be fulfilled 
      { 
       for (int j = 0; j < MTRX_MAX; j++) 
       { 
        cout << matrix1[i][j] << " "; 
       } 
       cout << endl; 
      } 

你最终打印什么。

更新1:你其实并不需要额外的循环for (int new_line = 0; new_line == 1; new_line++)

更新2:void Print_Matrix(int matrix1[][MTRX_MAX], int matrix2[][MTRX_MAX])不知道什么int sum[i][j]在你的代码。 Infact Print_Matrix(matrix1, matrix2,sum);与您的声明和定义相矛盾。

+0

谢谢你我会修复的 – ashumrani

+0

非常感谢你的帮助。现在程序工作正常。 @nullpointer – ashumrani

1

Get_Matrix将用户输入存储到局部变量中。当函数返回时,它们超出范围,丢弃数据。你的原型看起来是正确的传递二维数组的功能,你通过它们。当你想传递可变维度的二维数组时,事情会变得更加棘手,但是对于除第一维以外的所有维都是编译时常量的情况,它都是正确的。

Get_Matrix需要采取与其他矩阵函数(非const)相同的参数,并将矩阵存储到调用者提供的空间中。

(另一种方式是通过使用全局变量,而不是四处传递指针,但不这样做。)


使用调试器会显示你main的阵列间没有当Get_Matrix返回时不设置。

+0

非常感谢你的帮助。现在程序工作正常。 @petercordes – ashumrani

相关问题