【问题标题】:C/C++ Can not run a for loop in a for loopC/C++ 不能在 for 循环中运行 for 循环
【发布时间】:2019-10-13 13:05:24
【问题描述】:

这是我的代码:

#include <stdio.h>
/*
CALCULATING INVERSE OF A MATRIX
*/
int main(){

    int matris[3][3];
    int i = 0;
    int j = 0;
    for(i; i<3;i++){

        for(j;j<3;j++){

            scanf("%d", &matris[i][j]);                         
        }
        printf("%d", matris[i][j]);         
    }    
}

我知道它的基本知识,但我遇到了麻烦,我的编译器是 Dev-C++,顺便说一下我的操作系统是 windows 10,当我运行这段代码并按下 1、2、3 时,这是我唯一的输出可以看到。

1
2
3
0430
--------------------------------
Process exited after 2.351 seconds with return value 1

我不知道我的错误在哪里,谢谢帮助

编辑

我将代码编辑为:

int main(){

    int matris[3][3];
    int i,j;
    for(i = 0; i<3; i++){
        for (j=0;j<3;j++){
            scanf("%d", &matris);
        }
    }

    for(i = 0; i<3; i++){

        for (j=0;j<3;j++){

            printf("%d ", matris);
        }
    }

}

但我仍然看不到正确的输出。

输出:

1
2   
3
4
5
6
7
8
9
6487536 6487536 6487536 6487536 6487536 6487536 6487536 6487536 6487536

当然,预期的输出类似于 3x3 矩阵和整数 1 到 9

【问题讨论】:

  • 您期望的输出是什么?
  • 考虑在哪里打印值,在这种情况下 j 是什么。
  • 您访问的数组越界。在内部 for 循环 j 为 3 之后,您正在打印 matrix[i][3]。这就是所谓的未定义行为,可能会发生奇怪的事情。
  • 在第一个内循环之后,j == 3。你必须每次都重置它,比如for (j=0; ...。这就是 for for 的初始化部分。
  • 另外,您使用 C 或 C++ 什么语言?它们是两种不同的语言,即没有 C/C++ 这样的语言。如果是 C++,为什么要使用非类型安全输入和输出例程(scanfprintf)而不是类型安全函数(cincout)?为什么用循环外的变量而不是for (int i = 0; ...); 声明循环计数器?

标签: c++ c dev-c++


【解决方案1】:

你可以,但你需要将 j 设置为一个初始值,然后它才能为 i 的每个值进入循环 现在它只通过 j 循环一次,下次它去那里它看到 j > 然后 3 所以它只是跳过它

【讨论】:

    【解决方案2】:

    结果如下:

    $ g++ m.cpp
    $ ./a.out
    1
    2
    3
    04
    5
    6
    41954727
    8
    9
    32764
    

    这是代码:

    #include <stdio.h>
    /*
    CALCULATING INVERSE OF A MATRIX
    */
    int main(){
    
        int matris[3][3];
        int i = 0;
        int j = 0;
        for(i=0; i<3;i++){
    
            for(j=0;j<3;j++){
    
                scanf("%d", &matris[i][j]);
            }
            printf("%d", matris[i][j]);
        }
    }
    

    它可以正常工作,但是,我建议不要在j 循环之外使用printf("%d", matris[i][j]);,因为j 等于3,这是一种未定义的行为。

    【讨论】:

      【解决方案3】:

      不要这样:

      for(i = 0; i<3; i++){
          for (j=0;j<3;j++){
              scanf("%d", &matris);
          }
      }
      
      for(i = 0; i<3; i++){
          for (j=0;j<3;j++){
              printf("%d ", matris);
          }
      }
      

      改为这样做:

      for(i = 0; i<3; i++){
          for (j=0;j<3;j++){
              scanf("%d", matris[i]+j);
          }
      }
      
      for(i = 0; i<3; i++){
          for (j=0;j<3;j++){
              printf("%d ", matris[i][j]);
          }
      }
      

      【讨论】:

      • dev c++ 引发此错误“[Error] 'for' 循环初始声明只允许在 C99 或 C11 模式下”
      • @M.Utku 很好。使用编译器标志切换到 C99 或 C11 模式,现在是 2019 年——不再使用过时的编译器。如果您告诉我您使用什么编译器,我可能会帮助您找到正确的编译器标志。 -std=c++11-std=c99 之类的东西可能会有所帮助。
      • 我刚刚下载了 dev c++,但它在我编译时引发了一些错误,然后我删除了它并下载了另一个 dev c++。直到今天我都没有问题,但我不知道为什么它现在显示给我
      • @M.Utku 所以你从系统中删除了一个编译器,因为你有编译器错误??
      • @M.Utku 请查看更新后的答案,这应该适用于任何地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      相关资源
      最近更新 更多