【问题标题】:output is not in proper manner for 2d array in cc 中二维数组的输出方式不正确
【发布时间】:2017-07-05 17:56:39
【问题描述】:

c中的二维数组 我遇到了小错误,这让我搞砸了.. 你能发现任何错误吗,而我应该得到 op as

1 2 3
4 5 6 
7 8 9

但我得到了操作

1 2 4
4 5 7
7 8 9
#include <stdio.h>

int main(int argc,char* argv[])
{
    int m;
    scanf("%d",&m);
    int a[m][m],i,j;
    for(i=0;i<=m;i++){
        for(j=0;j<=m;j++){
            scanf("%d",&(a[i][j]));
            printf("%d",a[i][j]);

        }

    }

    for(i=0;i<=m;i++){
        for(j=0;j<=m;j++){
            printf("%d",a[i][j]);
            printf("\t");
        }
        printf("\n");
   }
}

【问题讨论】:

  • &lt;= m -> &lt; m
  • 投票结束这个简单的错字。我们已经有无数其他关于 SO 上的数组访问错误的问题。

标签: c multidimensional-array scanf


【解决方案1】:

声明:

int a[m][m];

表示您有一个包含m 行和m 列的数组,编号从0m-1。由于您的 &lt;=m 条件,您正在尝试访问不属于您的数组的元素。

改变你的两个循环:

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

你现在拥有的:

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

您可以阅读有关索引和数组的更多信息here

【讨论】:

    【解决方案2】:

    您的循环超出了数组的末尾。像 int a[m] 这样的数组的元素从 0 到 m-1,所以你的循环应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多