一个简单的scanf输入有关问题!求指导
一个简单的scanf输入问题!!!求指导
scanf("%f",&(student_grade[a].grade[c]));这一句有问题吗,每次到这就死了
------解决方案--------------------
- 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; }