简体   繁体   中英

Program crashes when reading first data point

I want to see what student have the best mark in the class. So I make this ,but i don't know where I am wrong

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

after i read the mark the program crash. Can someone help me and explain what to change? Thanks a lot.

The crash is most likely due to this:

    scanf("%f",d[i].mark);

You should pass the address as argument to read a float value. It should be:

    scanf("%f", &d[i].mark);

Technically, this is undefined behaviour. .

Compile with all warnings enabled. gcc warns even without any specific options:

warning: format %f expects argument of type âfloat *â, but argument 2 has type double [-Wformat=]
scanf("%f",d[i].mark);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM