【问题标题】:How can I print an array A[n][m]; using main() that was scanf() in a subprogram?如何打印数组 A[n][m];在子程序中使用作为 scanf() 的 main()?
【发布时间】:2020-04-28 10:55:41
【问题描述】:

在下面的代码中,我试图在子程序中 scanf() 一个矩阵,然后我想在 main() 部分中 printf() 它。我怎样才能做到这一点?我的主要目标是完全理解如何将矩阵从子程序传递到main() 程序。谢谢!

#include <stdio.h>

#define R 2
#define C 3

float save_the_matrix(int N, int M, float (*B)[M]);

int main(void)
{
  int n=2,m=3;
  int i,j;
  float A[n][m],C[n][m];

  puts("Enter the values of the matrix:");
  save_the_matrix( n, m, c);

  for(i=0;i<n;i++)
  {
    for(j=0;j<m;j++)
      printf("%6.2f",C[i][j]);
    printf("\n");
  }

  return 0;
}


float save_the_matrix(int N, int M, float (*B)[M])

{
  for(i=0;i<N;i++)
    for(j=0;j<M;j++)
    {
      printf("A[%d][%d]=",i,j);
      (*B)[M]=scanf("%f",&A[i][j]);
    }
}

【问题讨论】:

  • 我认为您的代码中有太多错误,无法提供合理的答案!例如,您的#define C 3 行将导致与稍后将C 声明为数组变量的巨大 冲突。你在save_the_matrix 中使用了一个变量A,但它是在哪里声明的?
  • 嗨@AdrianMole,非常感谢您的回答。只是试图纠正我的代码,但并没有真正得到好的结果。你有没有机会解决不正确的事情?它真的会帮助我加快我对这部分 C 的学习。几天前才开始。非常感谢!!

标签: c matrix scanf


【解决方案1】:

当你确切知道数组的大小时,你应该使用声明:

float save_the_matrix(int N, int M, float B[N][M]);

那么,这个函数的实现:

float save_the_matrix(int N, int M, float B[N][M])
{
  int i,j;
  for(i=0;i<N;i++)
    for(j=0;j<M;j++)
    {
      printf("B[%d][%d]=",i,j);
      scanf("%f",&B[i][j]);
    }
}

您不需要定义RC,因为它会在您的代码中产生冲突。

save_the_matrix( n, m, c);

应该使用C 而不是c

您应该在编译时使用-Wall -Wextra 以在代码中显示警告。例如声明矩阵A:float A[n][m],声明了但没有使用。

【讨论】:

  • 非常感谢@Hitokiri!!!!再次帮助我获得一些 C 知识! :-) 我现在遇到这些错误:screencast.com/t/pu4jdjdFs8rh 你有没有机会指出我正确的方向来完成这个?非常非常感谢!!
  • 使用C 而不是c 作为我的答案。而且,可能在 MacOS 中,你不应该在 for 循环中使用 int iint j。您可以在 for 循环之外声明 int i, j。我在回答中更新了此声明,希望对您有所帮助。
  • 越来越近@Hitokiri! :-) 不太确定如何正确声明 C 以完成此操作:screencast.com/t/f2nTswYfs 谢谢!!
  • 请在第 12 行使用大写字母 C 而不是小写字母 c
  • 啊对@Hitokiri。这个最终代码现在完美运行:screencast.com/t/NHv6iY2pvO 非常感谢您的帮助。这肯定会帮助我理解如何使用多维数组。再次感谢您的帮助!!!
猜你喜欢
  • 2020-03-31
  • 2020-12-12
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2019-08-29
  • 2012-11-04
  • 2022-01-16
  • 2013-02-08
相关资源
最近更新 更多