书上程序的小问题,怎么解决?请指教
//假定一个学生的信息包含如下:学号,姓名,三门功课的成绩和住址。其中,
//住址又分校内和校外两种。
struct off_school
{
int strnum;
char strname[20];
char city[20];
};
struct in_school
{
char collname[10];
char dorm[10];
int roomnum;
};
union address
{
struct off_school town;
struct in_school gown;
};
union student
{
long stunum;
char name[20];
int grade[3];
char off_in;
union address add;
}s[4]={ {99001,"Ma",{89,85,78},'f'},{99002,"Wang", {92,95,90},'n'},
{99003,"Lu",{78,80,81},'f'}, {99004,"Zhang",{89,86,81},'n'} };
//问题在这里,编译器说这儿的初始化太多,请问该怎么解决??
#include<iostream.h>
#include<string.h>
void main()
{
char name[20];
for(int i=0;i<4;i++)
{
cout<<"Input address--";
if(s[i].off_in=='f')
{
cout<<"strnum,strname,city:";
cin>>s[i].add.town.strnum>>s[i].add.town.strname>>s[i].add.town.city;
}
else
{
cout<<"collname,dorm,roomnum:";
cin>>s[i].add.gown.collname>>s[i].add.gown.dorm>>s[i].add.gown.roomnum;
}
}
cout<<"Input name:";
cin>>name;
for(i=0;i<4;i++)
{
if(!strcmp(s[i].name,name))
if(s[i].off_in=='f')
{
cout<<s[i].add.town.strnum<<','<<s[i].add.town.strname<<','
<<s[i].add.town.city<<endl;
cout<<s[i].grade[0]+s[i].grade[1]+s[i].grade[2]<<endl;
}
else
{
cout<<s[i].add.gown.collname<<','<<s[i].add.gown.dorm<<','
<<s[i].add.gown.roomnum<<endl;
cout<<s[i].grade[0]+s[i].grade[1]+s[i].grade[2]<<endl;
}
}
}
问题点数:10、回复次数:14Top
1 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-01 21:25:17 得分 0
不会是说分少了吧,怎么没有人来回答呢?
特别是“俗人”,“恰似你的温柔”,等,你们的人呢?Top
2 楼lbing7(向青润老大学习!!!)回复于 2005-06-01 22:08:48 得分 0
union student
{
long stunum;
char name[20];
int grade[3];
char off_in;
union address add;
}s[4]={ {99001,"Ma",{89,85,78},'f'},{99002,"Wang", {92,95,90},'n'},
{99003,"Lu",{78,80,81},'f'}, {99004,"Zhang",{89,86,81},'n'} };
//问题在这里,编译器说这儿的初始化太多,请问该怎么解决??
你的这个东西应该是结构体而不是连合体吧??Top
3 楼lbing7(向青润老大学习!!!)回复于 2005-06-01 22:08:55 得分 0
union student
{
long stunum;
char name[20];
int grade[3];
char off_in;
union address add;
}s[4]={ {99001,"Ma",{89,85,78},'f'},{99002,"Wang", {92,95,90},'n'},
{99003,"Lu",{78,80,81},'f'}, {99004,"Zhang",{89,86,81},'n'} };
//问题在这里,编译器说这儿的初始化太多,请问该怎么解决??
你的这个东西应该是结构体而不是连合体吧??Top
4 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-01 22:28:57 得分 0
这是一个结构中有联合变量,联合变量对应着结构变量。
是一个结构与联合相互嵌套的例子!Top
5 楼sinkinglife(沉沦)回复于 2005-06-01 23:02:13 得分 0
相互嵌套是不错,但是你的union student{ };是不对的。应该是struct student{};联合里面的成员是不能同时出现的。你的s[0]到s[4]中stunum,name,grade[3]都同时出现了。Top
6 楼sinkinglife(沉沦)回复于 2005-06-01 23:04:10 得分 0
是s[0]到s[3],打错了。Top
7 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-01 23:11:18 得分 0
我知道是s[0]到s[3],但怎么改?就不知道改哪里了?Top
8 楼mostideal(三甲)回复于 2005-06-01 23:31:15 得分 0
联合里面的成员是不能同时出现的。
---------------------------------------
的确是这样了。。Top
9 楼zdy_8212(zdy_8212)回复于 2005-06-02 01:26:50 得分 0
重新描述一下类型结构Top
10 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-02 07:56:04 得分 0
这个问题,以前碰到过,现在不知道了,所以请大家帮忙改正改正!1Top
11 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-02 08:46:10 得分 0
为什么??Top
12 楼clear117(小风)回复于 2005-06-02 09:23:44 得分 8
其实这个是对共用体使用的错误
把“union student”改成“struct student”就好
原因在于:共用体变量的各个成员使用共同的内存区域,所以共用体变量的内存空间在某个时刻只能保持某个成员的数据。由此可知,在程序中参加运算的必然是共用体变量的某个成员,而不能直接使用共用体变量。
从你的赋值来看那里应该是结构体而不是共用体
请大家发表自己的看法~~~Top
13 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-02 09:40:58 得分 0
太对了,联合体是不能这么赋值的。Top
14 楼llf_hust()回复于 2005-06-02 09:41:03 得分 2
应该是结构体Top




