我想看看哪个学生在课堂上有最好的成绩.所以我这样做,但我不知道我错在哪里
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;
}
Run Code Online (Sandbox Code Playgroud)
在我读完标记后程序崩溃了.有人可以帮我解释一下要改变什么吗?非常感谢.
崩溃很可能是由于:
scanf("%f",d[i].mark);
Run Code Online (Sandbox Code Playgroud)
您应该将地址作为参数传递以读取浮点值.它应该是:
scanf("%f", &d[i].mark);
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这是未定义的行为..
编译启用所有警告.即使没有任何特定选项,gcc也会发出警告:
警告:格式%f需要类型为âfloat*â的参数,但参数2的类型为double [-Wformat =]
scanf("%f",d [i] .mark);
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |