HJMing123 2016-12-09 13:00 采纳率: 50%
浏览 984
已采纳

关于C语言结构体的问题

 //4. 设一个班有若干学生(如10人),请定义学生结构包含以下信息:学生学号、学生姓名、高级语言程序课的成绩,请写程序完成以下功能:
//(1)定义函数以学生结构指针(指向学生数组)为参数,逐个录入该班集的学生信息;
//(2)定义函数以学生结构指针(指向学生数组)为参数,求出该班高级语言程序课的排名第一的学生,并输出该第一名学生的学号、姓名及高级语言程序课成绩。
//(3)在主程序中完成测试。
#include<stdio.h>
struct Student 
{
    int number;
    char name[20];
    double scores;
};
void StuInfo(struct Student *p);
void Rank(struct Student *p);

int main()
{
    struct Student stus[3];
    struct Student *p;
    p=stus;
    StuInfo(p);
    Rank(p);
    return 0;
}

void StuInfo(struct Student *p) 
{
    printf("请输入学生的学号,姓名,以及成绩:"); 
    for(int i=0;i<3;i++) 
    {
        scanf("%d%s%f",&(p+i)->number,&(p+i)->name,&(p+i)->scores); 
    }

}

void Rank(struct Student *p)
{
    struct Student *q;
    q=p; 
    for(int i=0;i<2;i++)
    {
        if(q->scores<(p+i+1)->scores)
        {
            q=p+i+1;
        }
    }
    printf("成绩最好的学生学号%d,姓名%s,成绩%f",q->number,q->name,q->scores);
}

请问为什么最后输出的scores总是0.000000?很是疑惑。

  • 写回答

2条回答 默认 最新

  • wang2046783134 2016-12-09 15:06
    关注

    输入double类型时scanf格式是lf,使用f字节数不对,具体的原因我就不清楚了,我c也不行~~

     for(int i=0;i<3;i++) 
        {
            scanf("%d%s%f",&(p+i)->number,&(p+i)->name,&(p+i)->scores); 
        }
    

    scanf("%d%s%lf",...)后面就不写了

    你试一下,我用printf输出调试出来的

    另外,数组名就是地址,那后边的&(p+i)->name是不是应该去掉前面的& ?我们讨论一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧