| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6648 人关注过本帖
标题:有关结构体的”left of '.name' must have struct/union type“
只看楼主 加入收藏
OnlyZhu
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2015-11-10
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:6 
有关结构体的”left of '.name' must have struct/union type“
有五个学生,每个学生的数据包括学号、姓名(最长19字节)、四门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,四门课的成绩,平均分数)。要求用结构体编程,变量数据类型的选择应适当,
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
#include <stdio.h>

/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
struct stud
{
    int num[10];
    char name[10];
    double score1,score2,score3,score4;
    double aver;
}stud[5];
struct stud myClass(struct stud *stud);


/* User Code End(考生添加代码结束) */

int main(void)
{
    int high;  /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */

    /* User Code Begin(考生可在本行后添加代码,行数不限) */
    myClass(stud);


    /* User Code End(考生添加代码结束) */

    printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  score4=%.2f  aver=%.2f\n",
        myClass[high].name, myClass[high].num,
        myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);

    return 0;
}

/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
struct stud myClass(struct stud *stud)
{
    int i,m;
    double max=0,sum=0;
    printf("Please input students  info:Num Name score1 score2 score3 score4\n");
    for(i=0;i<5;i++,stud++)
    {
        printf("%d: ",i+1);
        scanf("%d %s %lf %lf %lf %lf",stud->num,stud->name,&stud->score1,&stud->score2,&stud->score3,&stud->score4);
    }
    for(i=0;i<5;i++,stud++)
    {
        sum=stud->score1+stud->score2+stud->score3+stud->score4;
        stud->aver=sum/5.0;
    }
    for(i=0;i<5;i++,stud++)
    {
        if(max<stud->aver)
        {
            max=stud->aver;
            m=i;
        }
    }
    return stud[m];
}

我知道我的代码有错误,但不知道怎么改,刚学结构体,运用起来不熟,求教
搜索更多相关主题的帖子: 结构体 color 键盘 信息 姓名 
2016-04-10 16:45
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:20 
程序代码:
#include <stdio.h>

struct stu  //结构体名和数组名不要一样
{
    int num;  //?
    char name[10];
    double score1,score2,score3,score4;
    double aver;
}stud[5];

int myClass(struct stu* s);

int main(void)
{
    int high;

    high=myClass(stud);  //返回最高分序号

    printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  score4=%.2f  aver=%.2f\n",stud[high].name, stud[high].num,
    stud[high].score1, stud[high].score2, stud[high].score3, stud[high].score4, stud[high].aver);  //不要混淆数组和函数的名字

    return 0;
}

//返回最高分序号
int myClass(struct stu* s)
{
    int i,m=0;
    double max=0,sum=0;
    
    struct stu* p=s;  //不要动头指针s的内容,另定义p来向后移动
    
    printf("Please input students  info:Num Name score1 score2 score3 score4\n");
    for(i=0;i<5;i++,p++)
    {
        printf("%d: ",i+1);
        scanf("%d %s %f %f %f %f",&p->num,p->name,&p->score1,&p->score2,&p->score3,&p->score4);
    }
    
    p=s;  //恢复p的位置
    for(i=0;i<5;i++,p++)
    {
        sum=p->score1+p->score2+p->score3+p->score4;
        p->aver=sum/5;
    }
    
    p=s;  //恢复p的位置
    for(i=0;i<5;i++,p++)
    {
        if(max<p->aver)
        {
            max=p->aver;
            m=i;
        }
    }
    
    return m;  //
}

   唯实惟新 至诚致志
2016-04-10 17:39
OnlyZhu
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2015-11-10
收藏
得分:0 
谢谢
2016-04-10 22:18
OnlyZhu
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2015-11-10
收藏
得分:0 
回复 2楼 qq1023569223
其实这个题它下下来的程序就是
程序代码:
#include <stdio.h>

/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */



/* User Code End(考生添加代码结束) */

int main(void)
{
    int high;  /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */

    /* User Code Begin(考生可在本行后添加代码,行数不限) */



    /* User Code End(考生添加代码结束) */

    printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  score4=%.2f  aver=%.2f\n",
        myClass[high].name, myClass[high].num,
        myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);

    return 0;
}

/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */

我明白了你的程序,但我试着把stud.num这些换成myClass时,输出的时候score1,2,3,4和aver这些都是0.00,我不知道是为什么
程序代码:
#include <stdio.h>

/* User Code Begin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限) */
struct stu
{
    int num;
    char name[10];
    double score1,score2,score3,score4;
    double aver;
}stud[5];
int number(struct stu* s);


/* User Code End(考生添加代码结束) */

int main(void)
{
    int high;  /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */

    /* User Code Begin(考生可在本行后添加代码,行数不限) */
    struct stu *myClass;
    myClass=stud;
    high=number(myClass);
    myClass[high]=stud[high];
    



    /* User Code End(考生添加代码结束) */

    printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  score4=%.2f  aver=%.2f\n",
        myClass[high].name, myClass[high].num,
        myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);

    return 0;
}

/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
int number(struct stu* s)
{
    int i,m=0;
    double max=0,sum=0;
    
    struct stu* p=s;

    printf("Please input students  info:Num Name score1 score2 score3 score4\n");
    for(i=0;i<5;i++,p++)
    {
        printf("%d: ",i+1);
        scanf("%d %s %f %f %f %f",&p->num,p->name,&p->score1,&p->score2,&p->score3,&p->score4);
    }
    
    p=s;
    for(i=0;i<5;i++,p++)
    {
        sum=p->score1+p->score2+p->score3+p->score4;
        p->aver=sum/5;
    }
    
    p=s;
    for(i=0;i<5;i++,p++)
    {
        if(max<(p->aver))
        {
            max=p->aver;
            m=i;
        }
    }
    
    return m;
}
后面子函数就是和你编的一样,只是我把函数名变了一下,再另myClass=stud,但输出结果就是0.00
2016-04-10 23:13
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
myClass[high]=stud[high];  //这句本来就是不对的。如果非要那样,把stud[5]的名字改成myClass[5]。

   唯实惟新 至诚致志
2016-04-11 08:10
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
#include <stdio.h>

struct stu
{
    int num;
    char name[10];
    double score1,score2,score3,score4;
    double aver;
}myClass[5];

int number(struct stu* s);

int main(void)
{
    int high;

    high=number(myClass);

    printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  score4=%.2f  aver=%.2f\n",myClass[high].name, myClass[high].num,myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].score4, myClass[high].aver);

    return 0;
}

   唯实惟新 至诚致志
2016-04-11 08:13
OnlyZhu
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2015-11-10
收藏
得分:0 
回复 6楼 qq1023569223
明白了,谢谢你
2016-04-11 10:22
快速回复:有关结构体的”left of '.name' must have struct/union type“
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036358 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved