#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
)中的所有成员,但我无法打印除第1行以外的其他元素(剩余的行元素打印为0)。有没有人可以帮我打印第一行以外的成员?
发布于 2018-08-05 20:02:29
出现此问题的原因是您在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);
^^
去掉它。
https://stackoverflow.com/questions/51693815
复制相似问题