首页 > 解决方案 > 打印矩阵

问题描述

当我想打印我输入的矩阵时,我可以使用代码:

#include <stdio.h>
int main(void)
{
    int n, m; //row and column
    printf("Enter row and column:\n");
    scanf("%d %d", &n, &m);
    int x[n][m];
    printf("Enter your matrix:\n");
    for (int i = 0; i < n; i++) //input my matrix
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &x[i][j]);
        }
    }
    printf("print it:\n");
    for (int i = 0; i < n; i++) //print it
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", x[i][j]);
        }
        putchar('\n');
    }
}

在此处输入图像描述(一种可能的情况)
在上面的代码中,我必须为矩阵的行和列分配值,命名为“n”和“m”。

int n, m;
scanf("%d %d", &n, &m);

但现在我在问一种自动计数的方法。
这个可以直接拿吗? 在此处输入图像描述

标签: c

解决方案


您可以用一维数组模拟二维数组,如果这就是您的意思:

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

#define DIGITS 3

int main(void) { // It's good practice to fill function arguments with void if not planning on using them
 

  /* scanf("%d %d", &n, &m); Using scanf with uninitialised variables will result in 
   * undefined behaviour if it is unable to convert the input.  Using fgets
   * is easier to debug, safer, and cleaner.
   * I highly recommend this: http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
   */

  char buf[DIGITS+1];
  printf("%s", "Enter array rows:");
  fgets(buf, DIGITS+1, stdin);

  const int n = atoi(buf);
  
  printf("%s", "Enter array columns:");
  fgets(buf, DIGITS+1, stdin);
  
  const int m = atoi(buf);
  
  int x[n*m];

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      printf("Enter array value at %d, %d: ", i, j);
      fgets(buf, DIGITS+1, stdin);
      x[i+j] = atoi(buf);
    }
  }
  
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      printf("%d ", x[i+j]);
    }
    printf("\n");
  }
}

我不太确定当 C 平等地支持你的二维数组答案时你为什么要这样做。


推荐阅读