鱼C论坛

 找回密码
 立即注册
查看: 8088|回复: 10

结构体赋值给另一个 结构体 如何定义 求大神了

[复制链接]
发表于 2014-3-7 11:25:13 | 显示全部楼层 |阅读模式
4鱼币
定义了一个 输入学生信息的 结构体 通过比较 总成绩  排名   各个信息都要交换信息,我想定义另一个结构体 盛放它  完成交换
#include<stdio.h>

struct Student//定义储存学生信息的结构体
{
int num[20];    //定义一个存储学生学号的整型的数组
char name[20];//定义一个存储学生名字的字符类型的数组
int englishscore;//定义一个存储学生英语分数整型变量
int mathscore;//定义一个存储学生数学分数整型变量
int Cscore;//定义c语言分数变量
int all;
int average;
int place;
};
struct Student stu[4];//结构体中的变量数为4

struct temp//定义储存学生信息的结构体
{
int num1[20];    //定义一个存储学生学号的整型的数组
char name1[20];//定义一个存储学生名字的字符类型的数组
int englishscore1;//定义一个存储学生英语分数整型变量
int mathscore1;//定义一个存储学生数学分数整型变量
int Cscore1;//定义c语言分数变量
int all1;
int average1;
int place1;
};
struct temp stu1[4];//结构体中的变量数为4

void main(void)
{
struct Student *p;//申明指针指向结构体
struct temp;
int i,k,n;

p=stu;//将数组变量的初始地址赋予指针p


printf("请输入4学生的:\n");
printf("学号\t姓名\t英语成绩\t数学成绩\tC语言成绩\t总成绩\t平均成绩\t排名\n");

for(i=0;i<4;i++)//从键盘输入学生的信息
{
    scanf("%6d %18s %3d %3d %3d",&stu[i].num,&stu[i].name,&stu[i].englishscore,&stu[i].mathscore,&stu[i].Cscore);
}

for(i=0;i<4;i++)
{
    stu[i].all=stu[i].englishscore+stu[i].mathscore+stu[i].Cscore;
    stu[i].average=stu[i].all/4;
   
}

for(int j=0;j<3;j++)    /*外循环控制排序趟数,n个数排n-1趟*/
{
    for(i=0;i<3-j;i++)   /*内循环每趟比较的次数,第j趟比较n-j次*/

      if(stu[i].all<stu[i+1].all)    /*相邻元素比较,逆序则交换*/
      {
          stu1[i]=stu[i];

          stu[i]=stu[i+1];

          stu[i+1]=stu1[i];
      }
}

printf("综合成绩排名信息/n");
printf("学号\t姓名\t英语成绩\t数学成绩\tC语言成绩\n");

for(i=1;i<4;i++)//从数组中读出学生的信息
{
   stu[i].place=i+1;
   printf(" %d %s %d %d %d %d %d %d",stu[i].num,stu[i].name,stu[i].englishscore,stu[i].mathscore,stu[i].Cscore,
         stu[i].all,stu[i].average,stu[i].place);
}

printf("\n");

}
显示结果是:\c++\Microsoft Visual Studio\MyProjects\81\81.cpp(63) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct temp' (or there is no acceptable conversion)
执行 cl.exe 时出错.

自学 c对  结构体 交换   如何  定义  赋值    求大神了    求救


最佳答案

查看完整内容

删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种 1: 可以把结构清0。。。比如原本已经有了3个学生信息。。s[0], s[1], s[2] 现在需要删除第二个。。。那么把s[1]清0就像。。memset(&s[1], 0, sizeof(s[1])); 你要查询学生信息。。如果发现该结构是0.。比如s[1]全是0..那么说明就没有这个学生。。。 2:在结构中多定义一个。。变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-7 11:25:14 | 显示全部楼层

删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种
1: 可以把结构清0。。。比如原本已经有了3个学生信息。。s[0], s[1], s[2]
现在需要删除第二个。。。那么把s[1]清0就像。。memset(&s[1], 0, sizeof(s[1]));
你要查询学生信息。。如果发现该结构是0.。比如s[1]全是0..那么说明就没有这个学生。。。
2:在结构中多定义一个。。变量
struct Student//定义储存学生信息的结构体
{
int num[20];    //定义一个存储学生学号的整型的数组
char name[20];//定义一个存储学生名字的字符类型的数组
int englishscore;//定义一个存储学生英语分数整型变量
int mathscore;//定义一个存储学生数学分数整型变量
int Cscore;//定义c语言分数变量
int all;
int average;
int place;
bool IsReal;//如果是TRUE就是这个结构保存有学生信息, 反之没有学生信息
}
if(s[i].IsReal)
{
    //有学生,可以对s[i]保存的学生信息进行操作
}
else
{
    //无学生
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-7 13:25:03 | 显示全部楼层
struct Student stu[4];//结构体中的变量数为4
改为
struct Student stu[5];//结构体中的变量数为4
         stu1[i]=stu[i];

          stu[i]=stu[i+1];

          stu[i+1]=stu1[i];
改为
         stu[4]=stu[i];

          stu[i]=stu[i+1];

          stu[i+1]=stu[4];

评分

参与人数 1鱼币 +5 贡献 +5 收起 理由
张丽文 + 5 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-7 14:35:34 | 显示全部楼层
向往青莲 发表于 2014-3-7 13:25
把改为把改为

struct Student stu[4]  为何改为stu【5】下面的也不是 非常理解  求解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-7 14:54:54 | 显示全部楼层
张丽文 发表于 2014-3-7 14:35
struct Student stu[4]  为何改为stu【5】下面的也不是 非常理解  求解释

谢谢  理解了  多设置一格 用来做交换的容器 ,谢谢  大神,再麻烦一下,如何实现编程 可以删除学生记录的功能  ,希望 能有够指点一下  ,在下 感激不尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-7 21:38:52 | 显示全部楼层
向往青莲 发表于 2014-3-7 16:35
删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种
1: 可以把结构清0。。。比如原本已经 ...

谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-8 11:40:04 | 显示全部楼层
张丽文 发表于 2014-3-7 21:38
谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福

:ton: ————
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-9 10:13:45 | 显示全部楼层

哥  又要麻烦你了,我想统计一下各科不同分数段的人数,因为 课目多,我想用个函数 但返回值多,不知如何处理了

int compaer(int 比较统计各分数段的人数,返回值代表人数
{   int a=0,b=0,c=0,d=0,f=0;

    if(x<60)
    f++;
    else if(x=>60&&x<69)
    d++;
   else if(x=>70&&x<79)
    c++;
    else if(x=>80&&x<89)
    b++;
    else if(x=>90&&x<=100)
    a++;

    return(a,b,c,d,f);
   
}


for(i=0;i<4;i++)/*通过循环记录各科情况,但是 返回值有4个  我该如何处理,y定义好像也不行*/
{
   int y;
   y=compare(stu[i].englishscore);
   
   int z;
   z=compare(stu[i].mathscore);

   int h;
   z=compare(stu[i].Ccore);
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-9 10:15:29 | 显示全部楼层
张丽文 发表于 2014-3-9 10:13
哥  又要麻烦你了,我想统计一下各科不同分数段的人数,因为 课目多,我想用个函数 但返回值多,不知如何 ...

int compaer(int x)//比较统计各分数段的人数,返回值代表人数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-9 15:23:27 | 显示全部楼层
张丽文 发表于 2014-3-9 10:15
int compaer(int x)//比较统计各分数段的人数,返回值代表人数
struct _ScoreInformation{
        char        Subject[10];        //科目
        int                BeIn_90_100;        //90到100的人数
        int                BeIn_80_89;                //80到89的人数
        int                BeIn_70_79;                //70到79的人数
        int                BeIn_60_69;                //60到69的人数
        int                Under_60;                //60分以下的人数
}SCOREINFORMATION, *pSCOREINFORMATION;

//不知道可不可以这样定义。。。。。。。。反正意思就是这样嘛
SCOREINFORMATION MathScore = {"MathScore", 0, 0, 0, 0, 0};
SCOREINFORMATION EnglishScore = {"English", 0, 0, 0, 0, 0};

void compare(char *Subject, int Score)
{   
        pSCOREINFORMAMTION p = NULL;
        
        if (!strcmp(Subject, "Math"))        // 如果是数学。。。p就指向数学
                p = &MathScore;
        else if (!strcmp(Subject, "Englist"))
                p = &English;                                // 如果是英文。。。p就指向英文
        else
                {}

    if(x<60) 
                p->Under_60++;
    else if(x=>60&&x<69)
                p->BeIn_60_69++;
   else if(x=>70&&x<79)
                p->BeIn_70_79++;
    else if(x=>80&&x<89)
                p->BeIn_80_89++;
    else if(x=>90&&x<=100)
                p->BeIn_90_100++;

}


//这样调用compare函数, compare没有判断成绩是否有效。。。反正大概就这样嘛。。你自己看着改一下嘛。。。
compare("Math", stu[i].MathScore);


//有问题继续问。。。这种基础我还是能解答的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-9 15:37:21 | 显示全部楼层
谢谢 哥哥  我用了 3次 for 循环  来解决  就是 代码显得有点臃肿  呵呵  祝你开心每一天:loveliness::big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表