鱼C论坛

 找回密码
 立即注册
查看: 8524|回复: 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:在结构中多定义一个。。变量
小甲鱼最新课程 -> https://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:在结构中多定义一个。。变量
  1. struct Student//定义储存学生信息的结构体
  2. {
  3. int num[20];    //定义一个存储学生学号的整型的数组
  4. char name[20];//定义一个存储学生名字的字符类型的数组
  5. int englishscore;//定义一个存储学生英语分数整型变量
  6. int mathscore;//定义一个存储学生数学分数整型变量
  7. int Cscore;//定义c语言分数变量
  8. int all;
  9. int average;
  10. int place;
  11. bool IsReal;//如果是TRUE就是这个结构保存有学生信息, 反之没有学生信息
  12. }
复制代码
  1. if(s[i].IsReal)
  2. {
  3.     //有学生,可以对s[i]保存的学生信息进行操作
  4. }
  5. else
  6. {
  7.     //无学生
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  3.           stu[i+1]=stu1[i];
复制代码
改为
  1.          stu[4]=stu[i];

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

  3.           stu[i+1]=stu[4];
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

struct Student stu[4]  为何改为stu【5】下面的也不是 非常理解  求解释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

:ton: ————
小甲鱼最新课程 -> https://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);
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

int compaer(int x)//比较统计各分数段的人数,返回值代表人数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  12. void compare(char *Subject, int Score)
  13. {   
  14.         pSCOREINFORMAMTION p = NULL;
  15.        
  16.         if (!strcmp(Subject, "Math"))        // 如果是数学。。。p就指向数学
  17.                 p = &MathScore;
  18.         else if (!strcmp(Subject, "Englist"))
  19.                 p = &English;                                // 如果是英文。。。p就指向英文
  20.         else
  21.                 {}

  22.     if(x<60)
  23.                 p->Under_60++;
  24.     else if(x=>60&&x<69)
  25.                 p->BeIn_60_69++;
  26.    else if(x=>70&&x<79)
  27.                 p->BeIn_70_79++;
  28.     else if(x=>80&&x<89)
  29.                 p->BeIn_80_89++;
  30.     else if(x=>90&&x<=100)
  31.                 p->BeIn_90_100++;

  32. }


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


  35. //有问题继续问。。。这种基础我还是能解答的。。。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-9 15:37:21 | 显示全部楼层
谢谢 哥哥  我用了 3次 for 循环  来解决  就是 代码显得有点臃肿  呵呵  祝你开心每一天:loveliness::big
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-18 02:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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