一个简单的scanf输入有关问题!求指导

一个简单的scanf输入问题!!!求指导
C/C++ code

#include<stdio.h>
#include<string.h>
#define M 5             //假设有5个学生
#define N 4              //假设有4门课程
#define MAX 10          //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
 */
struct student
{
    char number[MAX];               //学号
    float grade[N];            //各科成绩
};
struct student student_grade[M];
int main()
{
    int a=0,c=0; 
    float student_avg[M];
    for(a=0;a<M-1;a++)
    {
        printf("请输入学生学号:\n");
        scanf("%s",student_grade[a].number);
        fflush(stdin);
        student_grade[a].number[MAX-1]='\0';    
        printf("请输入该学生的各科成绩:\n");
        for(c=0;c<N;c++)
        {
            scanf("%f",&(student_grade[a].grade[c]));
        }
    }
    return 0;
}



scanf("%f",&(student_grade[a].grade[c]));这一句有问题吗,每次到这就死了

------解决方案--------------------
C/C++ code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 5             //假设有5个学生
#define N 4              //假设有4门课程
#define MAX 10          //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
 */
struct student
{
    char number[MAX];               //学号
    float grade[N];            //各科成绩
};

struct student *student_grade[M];//改成指针数组 为下面分配空间做准备

int main()
{
    int a=0,c=0; 
    //float student_avg[M];
    for (int i = 0; i < M; i++)//先给它分配空间 不然会报错
    {
         student_grade[i] = (struct student*)malloc(sizeof(struct student));
    }

    for(a = 0;a < M; a++)
    {
        printf("请输入学生学号:\n");
        scanf("%s", student_grade[a]->number);
        getchar();//吸收回车键
        //fflush(stdin);
        //student_grade[a].number[MAX-1]='\0';//这两句可以不用scanf完后自动加'\0'的
        
        printf("请输入该学生的各科成绩:\n");

        for(c = 0; c < N; c++)
        {
            scanf("%f", &(student_grade[a]->grade[c]));
            getchar();//吸收回车键
        }
    }
    return 0;
}

------解决方案--------------------
你的定义和你输入事时用的那个不一样!
结构体定义为float,但是你的输入时为%s,应该为%lf
------解决方案--------------------
q希望能尽早解决吧
------解决方案--------------------
浮点库未加载,在scanf前用一下浮点就可了,比如申明个float的变量,如:float x = 0.0

------解决方案--------------------
我也出现过这样的问题,后来解决了。首先我要说一下4楼的,你不要随便改楼主的代码,因为它的代码没有任何问题,之所以出错是因为VC6.0的bug导致的,在vs2005下就不会有问题。解决问题的办法很多,比如在程序的前面定义一个浮点数,然后再把它输出,等程序正常后在删掉就可以了。
------解决方案--------------------
以下代码VC++6.0无错
C/C++ code

#include<stdio.h>
#include<string.h>
#define M 2             //假设有5个学生
#define N 4              //假设有4门课程
#define MAX 10          //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
 */
struct student
{
    char number[MAX];               //学号
    double grade[N];            //各科成绩
};
struct student student_grade[M];



/*
求每个学生的平均成绩
*/
void studentavg(double student_avg[])
{
    int a=0,b=0;
    double sum=0;
    for(a=0;a<M;a++)
    {
        sum=0;
        for(b=0;b<N;b++)
        {
            sum+=student_grade[a].grade[b];
        }
        student_avg[a]=sum/N;
    }
}
/*
求每门课的平均成绩
*/
void courseavg(double course_avg[])
{
    int a,b;
    double sum;
    for(a=0;a<N;a++)
    {
        sum=0;
        for(b=0;b<M;b++)
        {
            sum+=student_grade[b].grade[a];
        }
        course_avg[a]=sum/M;
        printf("%f    ",course_avg[a]);
    }
}
int main()
{
    int a=0,b=0,c=0; 
    int ch;
    double avg[M];
    double course_avg[N];
    for(a=0;a<=M-1;a++)
    {
        printf("请输入学生学号:\n");
        scanf("%s",student_grade[a].number);
        student_grade[a].number[MAX-1]='\0';    
        printf("请输入该学生的各科成绩:\n");
        for(c=0;c<N;c++)
        {
            scanf("%lf",&(student_grade[a].grade[c]));           //每次输入以回车结束
        }
        while((ch = getchar()) != '\n' && ch != EOF)
            ;
    }
    studentavg(avg); 
    courseavg(course_avg);

    /*
    输出学生平均成绩
    */
    for(a=0;a<M;a++)
    {
        for(b=0;b<9;b++)
        {
            putchar(student_grade[a].number[b]);
        }
        printf("学生的平均成绩是:");
        printf("%.3f  \n",avg[a]);
    }
    /*
        输出课程平均成绩
    */
    for(a=0;a<N;a++)
    {
        printf("课程%d的平均成绩是:",a+1);
        printf("%.3f  \n",course_avg[a]);
    }
    return 0;
}