输入十个学生成绩,输入了一个之后就出现“runtime error”!紧急
输入十个学生成绩,输入了一个以后就出现“runtime error”!紧急!
for(i=0;i<10;i++,p++)
{
scanf("%d",&(p->num));
scanf("%s",p->name);
scanf("%c%d",&(p->sex),&(p->age));
scanf("%f%f%f%f%f",&(p->score.chi),&(p->score.math),&(p->score.eng),&(p->score.phy),&(p->score.chem));
}
typedef struct
{
float chi;
float math;
float eng;
float phy;
float chem;
} score_5;
typedef struct
{
int num;
char name[20];
char sex;
int age;
score_5 score;
} student;
student stu[10];student *p=stu;for循环只执行一次就出现runtime error!!!!!请问是什么原因,怎么解决?谢谢!
------解决方案--------------------
请检查scanf的返回值
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
------解决方案--------------------
你就是这么写的?顺序也是这个样子的么?
------解决方案--------------------
你的C代码完全就是这样么?顺序也是这个样子的?
------解决方案--------------------
为什么不我不回复啊,我晕啊,回复了也没显示..给个提醒啊
------解决方案--------------------
------解决方案--------------------
p=(student *)malloc(10*sizeof(student));
student stu[10];
student *p=stu;
这里P已经有内存了,为什么还要分配内存呢?!
还有你是想从文件读取数据吧?那应该用f_scanf函数才对啊!
------解决方案--------------------
p=(student *)malloc(10*sizeof(student));有这一句就够了,不需要结构体。
for(i=0;i<10;i++,p++)
{
scanf("%d",&(p->num));
scanf("%s",p->name);
scanf("%c%d",&(p->sex),&(p->age));
scanf("%f%f%f%f%f",&(p->score.chi),&(p->score.math),&(p->score.eng),&(p->score.phy),&(p->score.chem));
}
typedef struct
{
float chi;
float math;
float eng;
float phy;
float chem;
} score_5;
typedef struct
{
int num;
char name[20];
char sex;
int age;
score_5 score;
} student;
student stu[10];student *p=stu;for循环只执行一次就出现runtime error!!!!!请问是什么原因,怎么解决?谢谢!
------解决方案--------------------
请检查scanf的返回值
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
------解决方案--------------------
你就是这么写的?顺序也是这个样子的么?
------解决方案--------------------
你的C代码完全就是这样么?顺序也是这个样子的?
------解决方案--------------------
为什么不我不回复啊,我晕啊,回复了也没显示..给个提醒啊
------解决方案--------------------
------解决方案--------------------
p=(student *)malloc(10*sizeof(student));
student stu[10];
student *p=stu;
这里P已经有内存了,为什么还要分配内存呢?!
还有你是想从文件读取数据吧?那应该用f_scanf函数才对啊!
------解决方案--------------------
p=(student *)malloc(10*sizeof(student));有这一句就够了,不需要结构体。
- C/C++ code
for(i=0;i<10;i++,p++) { scanf("%d",&(p->num)); scanf("%s",p->name); scanf("%c%d",&(p->sex),&(p->age)); scanf("%f%f%f%f%f",&(p->score.chi),&(p->score.math),&(p->score.eng),&(p->score.phy),&(p->score.chem)); }
------解决方案--------------------
10L已经找到问题所在了。
student stu[10];
student *p=stu;
这里P已经有内存了,为什么还要分配内存呢?!
p=(student *)malloc(10*sizeof(student));这个就是多余的!
p++不是指向stu[1],stu[2],而是指向molloc得到空间的后面了,那是你不能访问的!
------解决方案--------------------
再用fwrite(p,sizeof(student),10,fp );
另外最好检查一下p的malloc是否成功
------解决方案--------------------