关于类的函数不能实现递归调用

huang1yu2zhou3 2017-04-30 02:04:09
#include<iostream.h>
class people
{
protected:
char name[20];
public:
void judge(char*);
};
void people::judge(char *_name) //判断文件内是否有此名
{
fstream _A;
_A.open("停车场普通用户",ios::in|ios::binary);
int change;
for(;!_A.eof();)
{
_A.read((char*)this,sizeof(people));
if(strcmp(this->getname(),_name))
change=0;
else
{
change=1;
break;
}
}
if(change==1)
{
system("cls");
return;
}
else
{
system("cls");
cout<<" **************用户名不存在,请重新输入************"<<endl;
cin>>_name;
_A.close();
this->judge(_name);
}
}


main()
{
char _name[20]={"Zhangsan"}
people A;
A.judge(_name);
return;
}
...全文
205 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2017-04-30
  • 打赏
  • 举报
回复
int change = 1; //初始化,如果文件不存在或者没有数据,将会一直递归下去,直到程序卡死或者崩溃掉 还有你这个情况,不大适合递归算法,倒不如就来个循环,以下代码作为参考,没有经过编译和测试:

while(true)
{
	fstream _A("停车场普通用户",ios::in|ios::binary);
	if(!_A || _A.eof())
		break;

	int change = 1;
	while(!_A.eof()) {
		_A.read((char*)this,sizeof(people));
		if(strcmp(this->getname(),_name)) //没发现getname()的声明
			change=0;
		else 
			break;
	}

	_A.close();
	system("cls");
	if(change == 1) 
		break;

	cout<<"              **************用户名不存在,请重新输入************"<<endl;
	cin>>_name;
	if(strcmp(name, "#")) //作为退出条件
		break;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧