我想看看哪个学生在课堂上有最好的成绩。 所以我这样做,但我不知道我错在哪里
struct Date {
char name[31];
float mark;
};
struct Date * Read(unsigned int n,struct Date *d){
int i;
for(i=0;i<n;i++){
getchar();
fgets(d[i].name, 31, stdin);
scanf("%f",d[i].mark);
}
return d;
}
int main(){
unsigned int n;
struct Date *d;
scanf("%u",&n);
d = (struct Date*) malloc(n*sizeof(struct Date));
d=Read(n,d);
free(date);
return 0;
}
我读完标记后程序崩溃了。 有人可以帮我解释一下要改变什么吗? 非常感谢。
答案 0 :(得分:5)
崩溃很可能是由于:
scanf("%f",d[i].mark);
您应该将地址作为参数传递以读取浮点值。它应该是:
scanf("%f", &d[i].mark);
从技术上讲,这是undefined behaviour.。
编译所有启用的警告。即使没有任何具体选项,gcc也会发出警告:
警告:格式%f需要类型为âfloat*â的参数,但参数2的类型为double [-Wformat =]
的scanf( “%F”,d [I] .mark);