尝试将结构引用传递给函数以输入数据,但由于某种原因,程序面临运行时问题和崩溃。有人可以说出原因吗?
#include<stdio.h>
int getdata(struct bank *);
struct bank {
char name[40], ac_no[20];
float balance;
};
int main()
{
struct bank customer[5];
struct bank *p;
int i;
for (i = 0;i < 5;i++)
{
p = &customer[i];
getdata(&p);
}
getchar();
return 0;
}
int getdata(struct bank *ptr)
{
printf("Enter Name: ");
gets((ptr->name));
printf("Enter A/C Number: ");
gets((ptr->ac_no));
printf("Enter Balance: ");
scanf("%f",ptr->balance);
return 0;
}
编辑: ptr-&gt;余额导致程序崩溃,无法弄明白:|
答案 0 :(得分:4)
只需从&
删除运营商的getdata(&p)
地址即可。 &p
的类型为struct bank **p
,这意味着编译器应该对此发出警告,并且您已忽略该警告。
此外,永远不要使用gets()
这是一个危险的功能,并且在最近的c11标准中已被弃用。
答案 1 :(得分:2)
您的代码无效。首先,声明为函数bank
的参数的结构getdata
与函数后声明的结构bank
不同。
#include<stdio.h>
int getdata(struct bank *);
^^^^^^^^^^^
struct bank { // this is another structure
^^^^^^^^^^^
char name[40], ac_no[20];
float balance;
};
改为写。
#include<stdio.h>
struct bank {
char name[40], ac_no[20];
float balance;
};
int getdata(struct bank *);
这是在结构定义之后放置函数声明。
此函数调用
getdata(&p);
也无效,因为表达式&p
的类型为struct bank **
,而参数的类型为struct bank *
写
getdata( p );
函数gets
不安全,C标准不再支持。请改为使用fgets
或scanf
来指定要读取的字符数。