标题:[求助]一个可以运行但有问题的程序,希望弟兄们指正
取消只看楼主
Dam3000
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-6-5
 问题点数:0 回复次数:2 
[求助]一个可以运行但有问题的程序,希望弟兄们指正

#include<iostream.h>
//类定义
class person
{
unsigned num; //编号
char name[10]; //名字
void test(); //姓名测试
public:
void set();
void print()const
{
cout<<"编号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
}
};

void person::set()
{
cout<<"编号:"; cin>>num;
cout<<"姓名:"; cin>>name;
test(); //执行测试
}

void person::test() //不允许输入阿拉伯数字
{
for(int i=0;i<10 && name[i]!='\0';i++)
if(name[i]>='0'&&name[i]<='9')
{
cout<<"姓名输入有误,请重新输入!"<<endl;
cout<<"姓名:"; cin>>name;
test(); //直接递归
}
}//------------------定义完毕
//--------------主函数
void main()
{
person p;
p.set();
p.print();
}

问题1:在输入“编号”时如果输入了字符会出现错误 请问有什么方法可以避免?
问题2(在下最想问的问题):在输入“姓名”时输入了含有数字的字符串 如:123或ZhangSan987 程序将会显示输入错误,要求重新输入。若输入的是前者(123),此时只要重新输入一个不包含数字的字符串,程序将会正常运行; 但如果输入了既包含字母又包含数字的字符串 如:ZhangSan987 就算是重新输入了不包含数字的字符串,也会提示出错,要求重新输入,且就算按照要求输入也会重复提示多次(次数由数字的个数决定)。请问这个问题怎么处理?
问题3:给在下些意见……

不知道在下的问题是否描述得清楚……参考过论坛生存法则
衷心感谢大家

搜索更多相关主题的帖子: 弟兄 运行 
2007-06-12 23:15
Dam3000
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-6-5
得分:0 
哥们你太有才啦!!!!
谢谢!!!清空以后搞定了!!!

#include<iostream.h>

#include<memory.h> //提供内存操作相关函数

//-------------------------基类person

class person

{

unsigned num; //编号

char name[10]; //名字

void test(); //姓名测试

public:

void set();

void print()const

{

cout<<"编号:"<<num<<endl;

cout<<"姓名:"<<name<<endl;

}

};

void person::set()

{

cout<<"编号:"; cin>>num;

cout<<"姓名:"; cin>>name;

test();

}

void person::test() //不允许输入阿拉伯数字

{

for(int i=0;i<10 && name[i]!='\0';i++)

if(name[i]>='0'&&name[i]<='9')

{

memset(name,0,10); //清空数组

cout<<"姓名输入有误,请重新输入!"<<endl;

cout<<"姓名:"; cin>>name;

test(); //直接递归

}

}

//-------------------------派生类student

class student:public person

{

unsigned classnum; //班级号

unsigned achievement; //成绩

void test(); //成绩测试

public:

void set();

void print()const;

};

void student::set()

{

cout<<"输入一个学生的数据:"<<endl;

person::set();

cout<<"班号:"; cin>>classnum;

cout<<"成绩:"; cin>>achievement;

test();

}

void student::print()const

{

cout<<"显示一个学生的数据:"<<endl;

person::print();

cout<<"班号:"<<classnum<<endl;

cout<<"成绩:"<<achievement<<endl;

}

void student::test()

{

if(achievement<0||achievement>100)

{

cout<<"成绩输入有误!"<<endl;

cout<<"成绩:"; cin>>achievement;

test();

}

}

//-----------------------派生类teacher

class teacher:public person

{

char ZC[50]; //职称

char apartment[50]; //部门

void Ztest(); //职称测试

void atest(); //部门测试

public:

void set();

void print()const;

};

void teacher::set()

{

cout<<"输入一个教师的数据:"<<endl;

person::set();

cout<<"职称:"; cin>>ZC;

Ztest();

cout<<"部门:"; cin>>apartment;

atest();

}

void teacher::print()const

{

cout<<"显示一个教师的数据:"<<endl;

person::print();

cout<<"职称:"<<ZC<<endl;

cout<<"部门:"<<apartment<<endl;

}

void teacher::Ztest() //不允许输入阿拉伯数字

{

for(int i=0;i<50 && ZC[i]!='\0';i++)

if(ZC[i]>='0' && ZC[i]<='9')

{

memset(ZC,0,50); //清空

cout<<"职称输入有误,请重新输入!"<<endl;

cout<<"职称:"; cin>>ZC;

Ztest();

}

}

void teacher::atest() //不允许输入阿拉伯数字

{

for(int i=0;i<50 && apartment[i]!='\0';i++)

if(apartment[i]>='0' && apartment[i]<='9')

{

memset(apartment,0,50); //清空

cout<<"部门输入有误,请重新输入!"<<endl;

cout<<"部门:"; cin>>apartment;

atest();

}

}


红色字是新增加的代码~~
谢谢!!
如果有什么意见或是好的设计方案请狠狠地指教


FORTRAN他爹说:要有高级语言 就有了烂熟的 Hello World!
2007-06-13 18:29
Dam3000
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-6-5
得分:0 
谢谢楼上的兄弟,虽然有些地方不懂,但我会好好研究的!
谢谢各位的意见

FORTRAN他爹说:要有高级语言 就有了烂熟的 Hello World!
2007-06-14 22:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-146931-1-1.html




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

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