传递给函数时如何访问二维结构数组中的所有成员?
How access all members in a 2D array of structures when it is passed to a function?
#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) .
谁能帮忙打印除第一行以外的其他成员?
出现此问题是因为您在 print
函数中声明参数的方式:
void print(struct name v[][10],int row,int col)
^^^^^^
由于最里面的维度 10
,在 print()
函数中, v
将被视为列数为 10 的二维数组,当您尝试打印时如果 col
的值不是 10
,您将无法获得预期的输出。只需尝试一次将值 10
赋给 n
并检查程序的输出,您将获得预期的输出。
要解决此问题,请更改 print()
函数参数的顺序并将 10
替换为 col
void print(int row, int col, struct name v[][col])
这样称呼它
print(m, n, v);
另外,scanf()
格式字符串中不需要\n
:
scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
^^
删除它。
#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) .
谁能帮忙打印除第一行以外的其他成员?
出现此问题是因为您在 print
函数中声明参数的方式:
void print(struct name v[][10],int row,int col)
^^^^^^
由于最里面的维度 10
,在 print()
函数中, v
将被视为列数为 10 的二维数组,当您尝试打印时如果 col
的值不是 10
,您将无法获得预期的输出。只需尝试一次将值 10
赋给 n
并检查程序的输出,您将获得预期的输出。
要解决此问题,请更改 print()
函数参数的顺序并将 10
替换为 col
void print(int row, int col, struct name v[][col])
这样称呼它
print(m, n, v);
另外,scanf()
格式字符串中不需要\n
:
scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
^^
删除它。