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

啥也不说了,要下吊了!万恶的scanf!全部家当都给了

2012-09-07 
啥也不说了,要上吊了!万恶的scanf!全部家当都给了!C/C++ code#includestdio.h#includestdlib.htypedef

啥也不说了,要上吊了!万恶的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);         }}
[解决办法]
探讨

都是些小问题,参考下面代码及其注释。
还有,在你的程序中既然用了数组,就完全没有必要在用指针了。两者只用其中之一即可。
C/C++ code

#include<stdio.h>
#include<stdlib.h>
typedef struct{
float chi;
float math;
float eng;
float phy;
float ……

热点排行