【问题标题】:Values in array getting altered yet they shouldn't数组中的值被改变但他们不应该
【发布时间】:2021-12-22 02:41:48
【问题描述】:

这是一个程序,要求用户输入两个 3 × 3 矩阵的值,然后找到两个矩阵的总和,并与添加的矩阵一起打印出来,但由于某种原因,在输入两个矩阵的值后 a矩阵中的值被改变,然后它会影响总和,但有时它不会

#include<stdio.h>
void main(){
    int matrix1[2][2];
    int matrix2[2][2];
    int sumMatrix[2][2];
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("Matrix[%d][%d]\n", i, j);
            printf("Enter matrix one's values> ");
            scanf("%d", &matrix1[i][j]);
        }
    printf("\n");
    }
     for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("Matrix[%d][%d]\n", i, j);
            printf("Enter matrix two's values> ");
            scanf("%d", &matrix2[i][j]);
        }
    printf("\n");
     }
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
        sumMatrix[i][j] = matrix1[i][j] + matrix2[i][j];
            
        }
    }
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%d ", matrix1[i][j]);
        }
        printf("\n");}
        printf("\n");
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%d ", matrix2[i][j]);
        }
        printf("\n");}
        printf("\n");

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

}

}

【问题讨论】:

  • for(int i = 0; i&lt;3; i++){ 生成 0,1,2,但在 int matrix1[2]; 中,您只有 0,1 的空间。
  • 请不要将交互式程序发布为您的minimal reproducible example,除非您已将问题隔离到 I/O 部分。除非您告诉我所需的确切输入,否则我无法使用这样的程序重现任何内容,并且一旦您知道它就可以硬编码并将我必须阅读的代码量减半。
  • 你使用什么输入,你得到什么输出。检查input 是否大于 int 可以容纳的值。是的,应该使用矩阵[大小],即上面指出的矩阵[3][3]。

标签: arrays c for-loop multidimensional-array


【解决方案1】:

您声明大小为 2x2 的矩阵并像访问它们一样访问它们是 3x3。更确切地说是缓冲区溢出,您在不应该写入的地方写入,这样做会覆盖其他变量。

【讨论】:

    【解决方案2】:

    小伙子,那是数组溢出。 int matrix1[2][2]; 但是在循环中,你可能会得到matrix1[2][1],matrix1[2][2]。

    【讨论】:

      【解决方案3】:

      好吧,很明显我是白痴。我认为数组大小是根据它们将拥有的索引数量设置的,所以应该是 int matrix1[2][2] 而不是 int matrix [3][3]

      【讨论】:

      • 不要回复您的帖子,而是在答案中添加评论,并且仅在它带来新信息的情况下
      猜你喜欢
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2022-06-13
      • 1970-01-01
      相关资源
      最近更新 更多