读书人

没有有关问题程序但就是无法运行

发布时间: 2012-04-28 11:49:53 作者: rapoo

没有问题程序,但就是无法运行
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
static int num=3;
class BB//创建一个名为BB的类 包含Baby的数据,状态改变
{
public://建立公共成员
int age;
int hunger,nappy,boredom,h,n,b;
char _name[20];
void BB_date(char*name,int age,int hunger=0,int nappy=0,int boredom=0);//函数BB_date的函数声明,并定义默认参数
void date_change();
void date_print();
void Feed()//操作后使h=hunger清零
{
hunger=0;
}
void Nappy()
{
nappy=0;
}
void Play()
{
boredom=0;
}
};
void BB::BB_date(char*name,int age,int hunger,int nappy,int boredom)//name age的初始化,否则乱码
{
strncpy(_name,name,sizeof(_name));
name[sizeof(_name)-1]='\0';
age=age;
}
void BB::date_change()//改变各个状态的数值
{
hunger+=2*age;
nappy+=2*(12-age);
boredom+=20;
}
void BB::date_print()//将hunger nappy boredom三个值赋给h,n,b
{
h=hunger;
n=nappy;
b=boredom;
}
class change//创建一个名为change的类 包含操作具体实现过程
{
public:
void input(BB*date)//根据相应的操作使hunger nappy boredom各个数值改变或者增加,删除宝宝
{
void _feed(BB*date);
void _nappy(BB*date);
void _play(BB*date);
void _add(BB*date);
void _del(BB*date);
char aa;
cout<<"Please choose you choice:";
cin>>aa;
if (aa=='F'||aa=='f')//判断键盘输入的是F或者f如果是进行_feed操作
_feed(date);
else if (aa=='N'||aa=='n')
_nappy(date);
else if (aa=='P'||aa=='p')
_play(date);
else if (aa=='A'||aa=='a')
_add(date);
else if (aa=='D'||aa=='d')
_del(date);
else
{cout<<"wrong! Input again!"<<endl;
input(date);
}
}
void _feed(BB*date)//Feed的实现函数(实现过程和后面的Nappy Play _del相同后面不在说明 )
{
void show(BB*date);
int i,t;
char cc[20];
cout<<"choose a baby";
cin>>cc;
for(i=0;i<num;i++)
{
t=(strcmp(cc,date[i]._name)==0)?i:21;//条件运算语句判断cc和数组date中的姓名是否有相同 相同令t=i不同令t=21
}
if(t==21)//如果T=21(表示输入的名字不在date中)

cout<<"wrong! Please input again:";
_feed(date);
if(t!=21)//如果t不等于21执行相应第t个宝宝的相应状态清零
date[t].Feed();//执行BB类中的Feed()函数使Feed清零
show(date);

}
void _nappy(BB*date)
{
void show(BB*date);
int i,t;
char cc[20];
cout<<"choose a baby";
cin>>cc;
for(i=0;i<num;i++)
{
t=(strcmp(cc,date[i]._name)==0)?i:21;
}
if(t==21)

cout<<"wrong! Please input again";
_nappy(date);
if(t!=21)
date[t].Nappy();
show(date);

}
void _play(BB*date)
{
void show(BB*date);
int i,t;
char cc[20];
cout<<"choose a baby";
cin>>cc;
for(i=0;i<num;i++)
{
t=(strcmp(cc,date[i]._name)==0)?i:21;
}
if(t==21)

cout<<"wrong! Please input again";
_play(date);
if(t!=21)
date[t].Play();
show(date);

}
void _add(BB*date)//Add函数的实现
{
void show(BB *date);
char new_name[20];
int new_age;
cout<<"PLEASE ATTENTION!THE SYSTEM'S LARGEST BABY UP TO 20!"<<endl;
cout<<"Please input new baby's name :";
cin>>new_name;
cout<<"Please input new baby's age : ";
cin>>new_age;
date[num].BB_date(new_name,new_age);
num++;
show(date);
}
void _del(BB*date)
{
void show(BB *date);
int i,t;
char cc[20];
cout<<"choose a baby del:";
cin>>cc;
for (i=0;i<num;i++)
{
t=(strcmp(cc,date[i]._name)==0)?i:21;
}
if (t==21)


{cout<<"The baby you input is not in the list! Please input again:"<<endl;
_del(date);
}
if (t!=21)
for(i=t;i<num;i++)
{
date[i]=date[i+1];
}
num--;
show(date);
}
};
void show(BB*date)//创建显示数据,操作窗口的函数
{
void input(BB*date);
int i;
cout<<"***************************************************************************"<<endl;
cout<<" Welcome To Babycare System "<<endl;
cout<<"***************************************************************************"<<endl;



for (i=0;i<num;i++)
{
date[i].date_print();
cout<<setw(20)<<date[i]._name<<""<<setw(20)<<date[i].age;//输出每个数据宽度都是20的 第i个宝宝的名字和年龄
if (date[i].h>=100)//判断宝宝状态
cout<<"hunger";
else if (date[i].n>=100)
cout<<"nappy";
else if (date[i].b>=100)
cout<<"boredom";
else (date[i].h<100 && date[i].n<100 && date[i].b<100);
cout<<"content"<<endl;
date[i].date_change();//执行一次状态改变
}
cout<<"(F)eed a baby"<<endl<<"(N)appy change a baby"<<endl<<"(P)lay with a baby "<<endl<<"(A)dd a baby"<<endl<<"(D)elete a baby"<<endl;
show(date);
}
int main()//主函数
{
BB date[20];//定义一个BB的对象为20个内容的数组
date[0].BB_date("Bob",6);//数组内第一个成员为“name=Bob,age=6,hunger=0,nappy=0,boredom=0"
date[1].BB_date("Ann",12);
date[2].BB_date("Mary",7);
show(date);
return 0;
}



[解决办法]
都无法运行,还能叫"没问题的程序"啊.
下断点,一步步看吧
[解决办法]
唉呀妈呀,你弄编译器里好好编译一下吧,多设几个断点,好好跟跟吧。都编译不通过。简单看了下,你先把下面的问题改改吧。
1. name[sizeof(_name)-1]='\0';
这行应该是 _name[sizeof(_name)-1]='\0';
2. age=age;
这个是什么意思啊?应该是this->age = age;吧?
3. 最严重的问题!!!
void show(BB*date) 这个方法里面,最后一句还有个show(date);自己调用自己,还没有出口,死循环了。

读书人网 >C++

热点推荐