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

下面的程序输入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
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

必须要是数组的话,可以用函数啊,函数去设置啊,比如把他边成成员函数set(...);


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-26 11:36
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
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

就算你非要用带参数的构造函数,要用不同的值初始化它们,也只有一个一个的来,可以用下面这个思想:
#include <iostream>
using namespace std;
class A
{
int a,b;
public:
A(){}
A(int x,int y){a=x;b=y;}
void show(){cout<<a<<" "<<b<<endl;}
};

int main()
{
A *p[4];
p[0]=new A(1,2);
p[1]=new A(2,3);
p[2]=new A(3,4);
p[3]=new A(4,5);
for(int i=0;i<4;i++)p[i]->show();
system("pause");
return 0;
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
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
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
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,5);
//将st-name中的最多9个字符串复制到name中
strncpy(name,st_name,10);
}
void show()
{
cout<<endl
<<setw(8)<<staffNo
<<setw(13)<<name
<<setw(3)<<sex;
birthDay.show();
}
};

int main()
{
int yr,mh,dy;
char no[6],na[11],sx;
Staff *p[2];
for (int i=0;i<1;i++)
{
cout.setf(ios::left,ios::adjustfield);
cout<<"请输入年月日:";
cin>>yr>>mh>>dy;
cin.ignore(80,'\n');
cout<<endl<<"请输入职工号:";
cin>>setw(5)>>no;
cin.ignore(80,'\n');
cout<<endl<<"请输入姓名:";
cin>>setw(10)>>na;
cin.ignore(80,'\n');
cout<<endl<<"请输入性别(M/F):";
cin>>setw(1)>>sx;
cout<<endl;
Date birth(yr,mh,dy);
p[i]=new Staff(no,na,sx,birth);
}
for(int i=0;i<1;i++)
{
p[i]->show();
delete p[i];
}
system("pause");
return 0;
}

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-26 14:28
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
楼主是不是问类数组怎么输入呀
按struct数组那样,依次顺序输入

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-05-26 15:11
qddscience
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-4-22
收藏
得分:0 

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


我屋汝嫌低不住,雕梁画阁也知宽。 大须稳择安巢处,莫道巢成却不安。
2006-05-26 15:55
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
//将st-no中的最多4个字符的字符串复制到staffNo中
strncpy(staffNo,st_no,5);
//将st-name中的最多9个字符串复制到name中
strncpy(name,st_name,10);

cin>>setw(5)>>no;

cin>>setw(10)>>na;

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-26 20:44
快速回复:关于类数组的输入问题
数据加载中...
 
   



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

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