#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)。
除了第一行,有人可以帮忙打印其他成员吗?
答案 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);
^^
删除它。