传递给函数的二维数组如何访问结构的所有成员?

时间:2018-08-05 11:17:06

标签: c function multidimensional-array structure

#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;   
}

在上面的程序中,我想打印2d结构数组(v)中的所有成员,但是我无法打印第一行以外的元素(其余行元素的打印为0)。 除了第一行,有人可以帮忙打印其他成员吗?

1 个答案:

答案 0 :(得分:6)

由于您在print函数中声明参数的方式而出现问题:

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

由于最里面的尺寸10,在print()函数中,v将被视为2D数组,其列数为10,当您尝试打印它时,如果col的值不是10,将不会获得预期的输出。只需尝试将10的值赋予n,然后检查程序的输出,即可得到预期的输出。

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

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);
             ^^

删除它。