首页 > 解决方案 > 将二维结构数组传递给函数时如何访问它的所有成员?

问题描述

#include<stdio.h>
#include<string.h>

struct name
{
  char a[20];
  double s;
};
void print(struct name v[][10],int row,int col)
{ 
    int i,j;
    for( i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++){
            printf("%lf\n ",v[i][j].s );
        }
    }
}

int main()
{
  int m,n,i,j;
  scanf("%d %d",&m,&n);
  struct name v[m][n];
  for(i=0;i<m;i++)
    for(j=0;j<n;j++)
     scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
  print(v,m,n);
   return 0;   
}

在上面的程序中,我想打印二维结构数组 ( v) 中的所有成员,但我无法打印第一行以外的元素(剩余的行元素打印为 0)。谁能帮助如何打印第一行以外的成员?

标签: cfunctionmultidimensional-arraystructure

解决方案


由于您在函数中声明参数的方式,问题正在发生print

void print(struct name v[][10],int row,int col)
                        ^^^^^^

由于最里面的维度10,在print()函数中,v将被视为列数为 10 的二维数组,当您尝试打印它时,如果 的值不是 ,您将不会得到预期的col输出10。只需尝试一次为程序赋值10n检查程序的输出,您将获得预期的输出。

print()要解决此问题,请更改函数参数的顺序并替换10col

void print(int row, int col, struct name v[][col])

像这样称呼它

print(m, n, v);

此外,格式字符串\n中不需要:scanf()

scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
             ^^

去掉它。


推荐阅读