结构体赋值给另一个 结构体 如何定义 求大神了
定义了一个 输入学生信息的 结构体 通过比较 总成绩排名 各个信息都要交换信息,我想定义另一个结构体 盛放它完成交换#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 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
{
//无学生
} 把struct Student stu;//结构体中的变量数为4改为struct Student stu;//结构体中的变量数为4把 stu1=stu;
stu=stu;
stu=stu1;改为 stu=stu;
stu=stu;
stu=stu; 向往青莲 发表于 2014-3-7 13:25 static/image/common/back.gif
把改为把改为
struct Student stu为何改为stu【5】下面的也不是 非常理解求解释 张丽文 发表于 2014-3-7 14:35 static/image/common/back.gif
struct Student stu为何改为stu【5】下面的也不是 非常理解求解释
谢谢理解了多设置一格 用来做交换的容器 ,谢谢大神,再麻烦一下,如何实现编程 可以删除学生记录的功能,希望 能有够指点一下,在下 感激不尽 向往青莲 发表于 2014-3-7 16:35 static/image/common/back.gif
删除学生记录只需要把该结构定义一下。。自己懂得就行。。以下两种
1: 可以把结构清0。。。比如原本已经 ...
谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福 张丽文 发表于 2014-3-7 21:38 static/image/common/back.gif
谢谢 对你的感激 无以为表 ,愿你好人一生平安 幸福
:ton: ———— 向往青莲 发表于 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:13 static/image/common/back.gif
哥又要麻烦你了,我想统计一下各科不同分数段的人数,因为 课目多,我想用个函数 但返回值多,不知如何 ...
int compaer(int x)//比较统计各分数段的人数,返回值代表人数 张丽文 发表于 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);
//有问题继续问。。。这种基础我还是能解答的。。。 谢谢 哥哥我用了 3次 for 循环来解决就是 代码显得有点臃肿呵呵祝你开心每一天:loveliness::big
页:
[1]