【问题标题】:C: Wrong matrix values when printing them in main()C:在 main() 中打印矩阵值时出错
【发布时间】:2021-06-11 11:08:46
【问题描述】:

我有一个函数可以根据用户给定的维度创建一个新矩阵,它看起来像这样:

void matrix(n, m){

    int mtx[n][m];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {

            if ((j == 1 && i != 0 && i != n - 1) || (i == 1 && j != 0 && j < m - 3) ||
                (i == n - 2 && j != 0 && j < m - 3) || (j == m - 4 && i != 0 && i != n - 1)) {

                mtx[i][j] = 1;
                printf("%d ", mtx[i][j]);
            }
            else {
                mtx[i][j] = 0;
                printf("%d ", mtx[i][j]);
            }
        }
        printf("\n");
    }
}

它输出类似这样的东西(以 13x13 尺寸为例):

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

但如果我尝试在 main() 中做同样的事情,输出如下:

0 0 0 0 0 0 7602432 0 0 0 0 0 -13856 
0 0 0 0 0 -2145891403 1 -1 0 0 0 0 0 
-2144601408 1 -13360 0 1 0 64 0 0 0 -2145133264 1 -13168 
0 -12816 0 0 0 0 0 231600 8 0 0 -13168 0 
-12816 0 -2145990936 1 15 0 3 0 4206656 1 50 0 -2145996184 
1 -13904 0 18 0 -2145970054 1 2 0 -2145145120 1 -2144661632 1 
-2145988848 1 0 0 -2144002969 0 0 0 0 0 -2145996184 1 -13808 
0 0 0 -2145968555 1 -2145969808 1 -13808 0 0 0 0 0 
0 0 -2147184784 1 -2145147008 1 -2145968503 1 102 0 48 0 4202496 
1 0 0 -2147184784 1 0 0 5624 0 -10624 0 -2145503066 1 
-2145147008 1 0 0 0 0 -13168 0 -12816 0 0 0 0 
0 -13312 0 -2145650929 1 0 0 -2145145672 1 4206712 1 -13416 0 
0 0 688 0 13 0 4199690 1 13 1 13 0 -13360 

这是我在 main 中用来输出这个矩阵的一段代码:


    int mtx[t1][t2];
    matrix(t1, t2);

    for (int i = 0; i < t1; i++) {
        for (int j = 0; j < t2; j++) {
            printf("%d ", mtx[i][j]);
        }
        printf("\n");
    }

我的目标是在 main 中定义的 mtx[t1][t2] 上存储正确的值。

感谢您的帮助!

【问题讨论】:

  • 你从不设置mtx中的值。
  • 您有两个不同且截然不同且完全不相关的变量,名为mtx。请花一些时间回到您的教科书并阅读有关 范围 的更多信息。
  • @dbush 你的意思是尺寸? (“t1”和“t2”)
  • matrix()函数内部的局部变量mtxmain()中的变量不一样。
  • @Tastefool 我的意思是mtx 没有以任何方式修改。正如其他cmets所说,main中的mtxmatrix中的mtx是两个不同的变量。

标签: arrays c function matrix


【解决方案1】:

如前所述,main函数中的mtx数组,尽管名称相同,但与函数内部的mtx数组完全无关,它们属于不同的范围,一个不知道另一个,要修改函数内部的主函数mtx 数组,您必须将其作为参数传递,如下所示:

// add a parameter of the same type to the function parameter list
void matrix(int n, int m, int mtx[][m])
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if ((j == 1 && i != 0 && i != n - 1) || (i == 1 && j != 0 && j < m - 3) ||
                (i == n - 2 && j != 0 && j < m - 3) || (j == m - 4 && i != 0 && i != n - 1))
            {
                mtx[i][j] = 1;
            }
            else
            {
                mtx[i][j] = 0;
            }
        }
        printf("\n");
    }
}
int main()
{
    int t1 = 13, t2 = 13;
    int mtx[t1][t2];

    matrix(t1, t2, mtx); // pass it as an argument

    for (int i = 0; i < t1; i++)
    {
        for (int j = 0; j < t2; j++)
        {
            printf("%d ", mtx[i][j]);
        }
        printf("\n");
    }
}

您需要在函数中删除mtx 的声明以避免重新声明错误。

【讨论】:

  • 我正在研究那个解决方案,我现在唯一犯的错误是,当我主要将它作为参数传递时,我也在使用变量名及其维度,所以该程序没有输出任何内容,感谢您的回答!
  • @Tastefool,是的,就是这样,尺寸不是争论的一部分,我很高兴你解决了它。
  • @anastaciu 是否认为这样做是一种糟糕的风格 mtx[i][j] = (j == 1 && i != 0 && i != n - 1) || (i == 1 && j != 0 && j
  • @dreamcrash,那是……相当多的代码,让我们先离开吧。 ;)
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多