首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-06-24 
一个简单的scanf输入问题!!!求指导C/C++ code#includestdio.h#includestring.h#define M 5//假设有5个

一个简单的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;} 


[解决办法]
问题解决了吗,试试我的方法,我就是这样搞定的

探讨
没事,大家都是为了帮我解决问题!!都感谢了

热点排行