张丽文 发表于 2014-3-7 11:25:13

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

定义了一个 输入学生信息的 结构体 通过比较 总成绩排名   各个信息都要交换信息,我想定义另一个结构体 盛放它完成交换
#include<stdio.h>

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

struct temp//定义储存学生信息的结构体
{
int num1;    //定义一个存储学生学号的整型的数组
char name1;//定义一个存储学生名字的字符类型的数组
int englishscore1;//定义一个存储学生英语分数整型变量
int mathscore1;//定义一个存储学生数学分数整型变量
int Cscore1;//定义c语言分数变量
int all1;
int average1;
int place1;
};
struct temp stu1;//结构体中的变量数为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.num,&stu.name,&stu.englishscore,&stu.mathscore,&stu.Cscore);
}

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

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

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

          stu=stu;

          stu=stu1;
      }
}

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

for(i=1;i<4;i++)//从数组中读出学生的信息
{
   stu.place=i+1;
   printf(" %d %s %d %d %d %d %d %d",stu.num,stu.name,stu.englishscore,stu.mathscore,stu.Cscore,
         stu.all,stu.average,stu.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对结构体 交换   如何定义赋值    求大神了    求救


向往青莲 发表于 2014-3-7 11:25:14

张丽文 发表于 2014-3-7 14:54 static/image/common/back.gif
谢谢理解了多设置一格 用来做交换的容器 ,谢谢大神,再麻烦一下,如何实现编程 可以删除学生记录的 ...
删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种
1: 可以把结构清0。。。比如原本已经有了3个学生信息。。s, s, s
现在需要删除第二个。。。那么把s清0就像。。memset(&s, 0, sizeof(s));
你要查询学生信息。。如果发现该结构是0.。比如s全是0..那么说明就没有这个学生。。。
2:在结构中多定义一个。。变量struct Student//定义储存学生信息的结构体
{
int num;    //定义一个存储学生学号的整型的数组
char name;//定义一个存储学生名字的字符类型的数组
int englishscore;//定义一个存储学生英语分数整型变量
int mathscore;//定义一个存储学生数学分数整型变量
int Cscore;//定义c语言分数变量
int all;
int average;
int place;
bool IsReal;//如果是TRUE就是这个结构保存有学生信息, 反之没有学生信息
}if(s.IsReal)
{
    //有学生,可以对s保存的学生信息进行操作
}
else
{
    //无学生
}

向往青莲 发表于 2014-3-7 13:25:03

把struct Student stu;//结构体中的变量数为4改为struct Student stu;//结构体中的变量数为4把         stu1=stu;

          stu=stu;

          stu=stu1;改为         stu=stu;

          stu=stu;

          stu=stu;

张丽文 发表于 2014-3-7 14:35:34

向往青莲 发表于 2014-3-7 13:25 static/image/common/back.gif
把改为把改为

struct Student stu为何改为stu【5】下面的也不是 非常理解求解释

张丽文 发表于 2014-3-7 14:54:54

张丽文 发表于 2014-3-7 14:35 static/image/common/back.gif
struct Student stu为何改为stu【5】下面的也不是 非常理解求解释

谢谢理解了多设置一格 用来做交换的容器 ,谢谢大神,再麻烦一下,如何实现编程 可以删除学生记录的功能,希望 能有够指点一下,在下 感激不尽

张丽文 发表于 2014-3-7 21:38:52

向往青莲 发表于 2014-3-7 16:35 static/image/common/back.gif
删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种
1: 可以把结构清0。。。比如原本已经 ...

谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福

向往青莲 发表于 2014-3-8 11:40:04

张丽文 发表于 2014-3-7 21:38 static/image/common/back.gif
谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福

:ton: ————

张丽文 发表于 2014-3-9 10:13:45

向往青莲 发表于 2014-3-8 11:40 static/image/common/back.gif
————

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

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.englishscore);
   
   int z;
   z=compare(stu.mathscore);

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

张丽文 发表于 2014-3-9 10:15:29

张丽文 发表于 2014-3-9 10:13 static/image/common/back.gif
哥又要麻烦你了,我想统计一下各科不同分数段的人数,因为 课目多,我想用个函数 但返回值多,不知如何 ...

int compaer(int x)//比较统计各分数段的人数,返回值代表人数

向往青莲 发表于 2014-3-9 15:23:27

张丽文 发表于 2014-3-9 10:15 static/image/common/back.gif
int compaer(int x)//比较统计各分数段的人数,返回值代表人数

struct _ScoreInformation{
        char        Subject;        //科目
        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.MathScore);


//有问题继续问。。。这种基础我还是能解答的。。。

张丽文 发表于 2014-3-9 15:37:21

谢谢 哥哥我用了 3次 for 循环来解决就是 代码显得有点臃肿呵呵祝你开心每一天:loveliness::big
页: [1]
查看完整版本: 结构体赋值给另一个 结构体 如何定义 求大神了