啥也不说了,要上吊了!万恶的scanf!全部家当都给了!
- C/C++ code
#include<stdio.h>#include<stdlib.h>typedef struct{ float chi; float math; float eng; float phy; float chem; }score_; typedef struct{ int num; char name[20]; char sex; int age; score_ score;}student;void main(){ student stu[10]; student *stu_=stu; FILE *fp; int i; printf("请输入%d位同学的信息\n",3); for (i=0;i<3;i++,stu_++) { scanf("%d",&stu_->num); scanf("%s",stu_->name); scanf(" %c",&stu_->sex); scanf("%d",&stu_->age); scanf("%d %d %d %d %d",&stu_->score.chi,&stu_->score.math,&stu_->score.eng,&stu_->score.phy,&stu_->score.chem); } for (i=0;i<3;i++) { printf("%d,%d,%d,%d,%d\n",stu[i].score.chi,stu[i].score.math,stu[i].score.eng,stu[i].score.phy,stu[i].score.chem); } 根据论坛众位好心的帮忙,我试了一下。终于可以完整的输入N个学生给的信息了!我非常高兴。等我输入完了回车一看!悲剧了!发现stu[i]每位学生的成绩是这样的。
请输入3个学生的信息
0202 liqiang m 20 98 95 45 56 87
0302 wangxia m 19 89 56 78 65 78
0301 lifengfen w 20 56 98 78 56 78(好了,输入完以后,按回车查看学生的成绩,结果是这样)
0,923303936,0,923244784,0
0,923156480,0,952345123,0
0,.........,0,.........,0
请各位大神,帮我看一下是哪里出了问题。(至于stu->name前面要不要加&,我试过了,加不加都一样,所以 不是这个的问题)帮我改一下。最好还是大神自己先运行好。
Ps:我心碎了啊,一个看似很简单的问题,为什么会这样呢!?
[解决办法]
for (i=0;i<3;i++,stu_++)
你把stu_++是想干嘛呢?
后面的输入用stu_[i]不就行了,你把stu_指向的地址变了,当你输入完三组数据后,stu_已经指向数组中第四个元素的位置了,再后面调用stu_[i]循环来输出,输出的就是stu_[3]stu_[4]stu_[5]的数据了,必然是错误的
[解决办法]
都是些小问题,参考下面代码及其注释。
还有,在你的程序中既然用了数组,就完全没有必要在用指针了。两者只用其中之一即可。
- C/C++ code
#include<stdio.h>#include<stdlib.h>typedef struct{ float chi; float math; float eng; float phy; float chem; }score_; typedef struct{ int num; char name[20]; char sex; int age; score_ score;}student;void main(){ student stu[10]; int i; printf("请输入%d位同学的信息\n",3); for (i=0;i<3;i++) { scanf("%d ",&stu[i].num); /*增加空格,因为你的输入方式是用空格来隔开各个字段的*/ scanf("%s ",stu[i].name); scanf("%c ",&stu[i].sex); scanf("%d ",&stu[i].age); /*%d要改成%f*/ scanf("%f %f %f %f %f", &stu[i].score.chi, &stu[i].score.math, &stu[i].score.eng, &stu[i].score.phy, &stu[i].score.chem); } for (i=0;i<3;i++) { /*%d要改成%f*/ printf("%f,%f,%f,%f,%f\n",stu[i].score.chi,stu[i].score.math,stu[i].score.eng,stu[i].score.phy,stu[i].score.chem); }}
[解决办法]