读取第一个数据点时程序崩溃

时间:2016-01-20 20:24:54

标签: c struct

我想看看哪个学生在课堂上有最好的成绩。 所以我这样做,但我不知道我错在哪里

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;
}

我读完标记后程序崩溃了。 有人可以帮我解释一下要改变什么吗? 非常感谢。

1 个答案:

答案 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);