| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 767 人关注过本帖
标题:关于类数组的输入问题
取消只看楼主 加入收藏
qddscience
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-4-22
收藏
 问题点数:0 回复次数:3 
关于类数组的输入问题

下面的程序输入4个职工记录并保存在一个数组中,然后显示输出数组中的刚输入的职工记录:
#include<iomanip.h>
#include<string.h>
class Date{ //日期类
short year; //年
short month; //月
short day; //日
public:
Date();
Date(int y,int m,int d):year(y),month(m),day(d){}
void show(){cout<<year<<'.'<<month<<'.'<<day;}
};
class Staff{ //职工类
char staffNo[5]; //职工号
char name[10]; //姓名
char sex; //性别,用M表示男、用F表示女
Date birthDay; //出生日期
public:
Staff();
Staff(const char st_no[],const char st_name[],char st_sex,
const Date &st_date):birthDay(st_date),sex(st_sex)
{
//将st-no中的最多4个字符的字符串复制到staffNo中
strncpy(staffNo,st_no,4);
//将st-name中的最多9个字符串复制到name中
strncpy(name,st_name,9);
}
void show()
{
cout<<endl<<setw(5)<<staffNo
<<setw(10)<<name
<<setw(3)<<sex;
birthDay.show();
}
};
Date::Date()
{
cout<<endl<<"请输入年月日:";
cin>>year>>month>>day;
cin.ignore(80,'\n'); //吃掉行尾多余字符(如果有的话)
}
Staff::Staff()
{
cout.setf(ios::left,ios::adjustfield);
cout<<endl<<"请输入职工号:";
cin.getline(staffNo,5);
cin.ignore(80,'\n');
cout<<endl<<"请输入姓名:";
cin.getline(name,10);
cin.ignore(80,'\n');
cout<<endl<<"请输入性别(M/F):";
cin>>sex;
cin.ignore(80,'\n');
}
void main()
{
Staff ss[4];
for(int i=0;i<4;i++)ss[i].show();
}

如果把无参构造函数改成Date::Date(){}和Staff::Staff(){},同时修改主函数,使程序功能不变。我改过以后,总是不对,
在主函数里,要是调用有参构造函数,以数组的方式应该怎么进行呢?

搜索更多相关主题的帖子: 输入 
2006-05-26 11:08
qddscience
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-4-22
收藏
得分:0 
这个题目的意思是通过调用有参构造函数如何给在主函数中定义的4个Staff类型的记录赋值?无参构造函数是空的了,要是用ss[i](no,name,sex,birth);这种方式也不对啊

[此贴子已经被作者于2006-5-26 11:48:26编辑过]


我屋汝嫌低不住,雕梁画阁也知宽。 大须稳择安巢处,莫道巢成却不安。
2006-05-26 11:46
qddscience
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-4-22
收藏
得分:0 

void main()
{

int yr,mh,dy;
char no[5],na[10],sx;
Staff *p[2];

for (int i=0;i<2;i++)
{

cout.setf(ios::left,ios::adjustfield);
cout<<endl<<"请输入年月日:";
cin>>yr>>mh>>dy;
cin.ignore(80,'\n');

cout<<endl<<"请输入职工号:";
cin.getline(no,5);
cin.ignore(80,'\n');

cout<<endl<<"请输入姓名:";
cin.getline(na,10);
cin.ignore(80,'\n');

cout<<endl<<"请输入性别(M/F):";
cin>>sx;
cin.ignore(80,'\n');

Date birth(yr,mh,dy);
p[i]=new Staff(no,na,sx,birth);

}

for(i=0;i<2;i++)
{
p[i]->show();
}

}

我把主程序改成这样了。可是在运行的时候,输出姓名值字符少的正确,可是字符一多就出现乱码,这是怎么回事呢?


我屋汝嫌低不住,雕梁画阁也知宽。 大须稳择安巢处,莫道巢成却不安。
2006-05-26 13:41
qddscience
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-4-22
收藏
得分:0 

正确了,谢谢。可是最终改哪儿了?


我屋汝嫌低不住,雕梁画阁也知宽。 大须稳择安巢处,莫道巢成却不安。
2006-05-26 15:55
快速回复:关于类数组的输入问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011974 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved