c - 将二维结构数组传递给函数时如何访问它的所有成员?
问题描述
#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);
此外,格式字符串\n
中不需要:scanf()
scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
^^
去掉它。
推荐阅读
- perl - Perl 将格式化日期转换为 ymd H:M
- sql - SQL 1000+ 值和 VBA
- templates - Azure DevOps Pipeline:一个阶段两次使用相同的模板
- testng - 如何将 TestNG @DataProvider 迁移到 JUnit Jupiter @ParameterizedTest
- html - 检查输入时如何使列表项可见
- java - 在 spring 控制器中获取请求路径
- python - 在 Python 中使用 __str__ 打印对象时遇到问题
- javascript - Babel 不处理 node_modules - 没有排除,没有 .babelrc
- vb.net - 用三个列表框的值编写一个 .txt
- azure-functions - 无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractions