C程序只起作用

时间:2016-02-08 10:55:24

标签: c

我需要制作一个程序,说我必须填写" 1"在奇数行和" 0"在偶数的。我尝试并编写了这段代码,但它似乎只适用于一部分。 拜托,你能解释一下这个方法吗?

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

main()
{
  int r, c;
  do {
  printf("Insert the number of the rows in the matrix: ");
  scanf("%d", &r);
  printf("Insert the number of the colums in the matrix: ");
  scanf("%d", &c);
  } while(r<=0||c<=0);

  r--; c--;
  int mat[r][c];
  int a, b;

  for(a=0; a<=r; a++)
  {
    for(b=0; b<=c; b++)
    {
      if(a%2==0)
      {mat[a][b]=0;}
      else {mat[a][b]=1;}
    }
  }

  printf("\nOUTPUT:\n\n");
    for(a=0; a<=r; a++){
      for(b=0; b<=c; b++){
        printf("%d", mat[a][b]);
      }
      printf("\n");
    }

  return 0;
}

INPUT:2,3

输出: 001 111

2 个答案:

答案 0 :(得分:1)

您没有正确使用行数和列数。确实,在C中,具有N条目的数组只能访问索引0到N - 1,并且索引N是超出数组范围的索引。但是你仍然需要用实际大小来定义数组:

// Don't adjust c and r here

int mat[r][c];

for循环中使用维度时,您可以使用mat[r][c]代替<作为条件,确保永远不会访问<=

for (a = 0; a < r; a++) {
    for (b = 0; b < c; b++) {
        if (a % 2 == 0) {
            mat[a][b] = 0;
        } else {
            mat[a][b] = 1;
        }
    }
}

答案 1 :(得分:0)

你搞乱了矩阵的大小。您可能想要更改这两个的顺序并尝试一下:

r--; c--;
int mat[r][c];

将此更改为

int mat[r][c];
r--; c--;

并且代码应该按预期工作。