1

似乎一切都是正确的,但是当我打印时,它会将所有元素打印为零...请帮助我

#include <stdio.h>
#include <stdlib.h>

#define COL 4
#define ROW 3

int y[3][4] = {{1, 2, 3},
               {4, 5, 6},
               {7, 8, 9}
                        };        


int main()
{
   int i,j;

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

      for(j=0;j<=COL;j++)
      {
          printf("Value at col %d and row %d, is : %d\n",COL,ROW,y[ROW][COL]);
      }
   }

 }

请帮我!

4

5 回答 5

2

您的代码中有几个问题:

  • 您的循环将一个元素计数到最远,它们从 0到并包括ROW/COL,而您的数组从 0COL/ROW。使用for(i=0; i < ROW; i++). 注意<而不是你的<=! (COL 循环也是如此)
  • 您交换了printf()语句中的行和列,首先使用列然后使用行。
  • 您没有使用 中的变量printf(),而是使用printf("Value at col %d and row %d, is : %d\n",j,i, y[i][j]);
  • 你的数组只有 3 个COLumns,而不是#defined4 个
于 2013-02-26T09:59:27.827 回答
1
printf("Value at col %d and row %d, is : %d\n",i,j,y[i][j]);

您正在使用 ROW 和 COL 作为偏移量而不是循环变量

于 2013-02-26T09:58:39.483 回答
1

数组元素通过索引访问使用 i & j 访问数组元素,例如 i>=0 和 i< ROW,例如

printf("Col:%d, Row:%d, Value:%d", i, j,y[i][j]);
于 2013-02-26T10:10:35.043 回答
0

改变

printf("列 %d 和行 %d 处的值是:%d\n",COL,ROW,y[ROW][COL]);

进入

printf("列 %d 和行 %d 处的值是:%d\n",i,j, y[i][j]);

另请注意,您的数组维度是3;4,然后初始化为3;3

于 2013-02-26T09:58:53.340 回答
0
      printf("Value at col %d and row %d, is : %d\n",COL,ROW,y[ROW][COL]);

有了这个,你正在打印:y[ROW][COL]而你打算y[i][j]

由于它调用未定义的行为,您也正在越界访问。

您的条件应该是:i<ROw并且j<COL在 for 循环中。

于 2013-02-26T09:59:57.547 回答