【C++】出现引发了未经处理的异常:读取访问权限冲突。**_Pnext** 是 0xFFFFFFFFFFFFFFFF。该问题如何解决。大佬救命

#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
using namespace std;


void login(const char*, double, double&);
void information(const char*, double&);
void pay(const char*, double, double);

class VIP {
public:
	double phonenumber;                              //手机号
	string password;                                 //密码
	double money;                                    //余额
	double score;                                    //积分
	bool key;										//判断是否是会员,1为会员
	VIP() {											//初始化
		phonenumber = 0;
		password = "noName";
		money = 0;
		score = 0;
		key = 0;
	}
	VIP(double a, string b, double c, double d, double e) {
		phonenumber = a;
		password = b;
		money = c;
		score = d;
		key = e;
	}
	VIP(const VIP& p) {
		phonenumber = p.phonenumber;
		password = p.password;
		money = p.money;
		score = p.score;
		key = p.key;
	}
	~VIP() {
		cout << "释放"<<phonenumber << endl;
	};
	void Append(const char*);						//注册会员
	int judgephone(const char*);			//判断手机号正确性
	int judgepass(const char*);				//判断密码正确性
	
};

const VIP mark = { 0,"noName\0",0,0,0 };                //全局变量,空记录
int VIP::judgephone(const char* filename) {
	fstream f1(filename, ios::in | ios::binary);
	f1.seekg(0, ios::beg);
	VIP p1;
	int a = 0;
	while (f1.read((char*)&p1, sizeof(VIP))) {
		if(p1.phonenumber == phonenumber )
		{
			f1.close();
			a = 1;
			break;
		}
		if (p1.phonenumber == 1) {
			f1.close();
			break;
		}
	}
	if (a) return 1;
	else return 0;
}
int VIP::judgepass(const char* filename) {
	fstream f2(filename, ios::in | ios::binary);
	f2.seekg(0, ios::beg);
	VIP p2;
	int a = 0;
	while (f2.read((char*)&p2, sizeof(VIP))) {
		if (p2.password == password)
		{
			f2.close();
			a = 1;
			break;
		}
		if (p2.password=="noName\0") {
			f2.close();
			break;
		}
	}
	if (a) return 1;
	else return 0;
}
void VIP::Append(const char* filename) {
	fstream file(filename, ios::in | ios::out | ios::binary);
	VIP p3;
	bool cannotcontinue = true;
	file.seekg(0, ios::beg);                             //移动指针到文件头
	do {                                                 //查找文件尾
		file.read((char*)&p3, sizeof(VIP));
	} while (p3.phonenumber != 0);
	file.seekp(-long(sizeof(VIP)), ios::cur);            //调整指针位置
	while (cannotcontinue) {                             //控制程序,以确保密码格式正确
		cout << "请输入密码:(6-12位)";
		cin >> password;
		int lenpassword = password.length();
		if ((lenpassword < 6) || (lenpassword > 12)) {
			cout << "密码的长度不被认可,请重新输入。\n";
		}
		else cannotcontinue = false;
	}
	p3.password = password;
	p3.phonenumber = phonenumber;
	file.write((char*)&p3, sizeof(VIP));                //写记录
	file.write((char*)&mark, sizeof(VIP));               //写文件结束标志
	cout << "已注册成功" << endl;
	file.close();
}
void login(const char* filename, double phone1, double& phone2) 
{
	cout << "请选择:1 登录,2 注册:";
	int choose1;
	cin >> choose1;
	VIP vip1;
	vip1.phonenumber = phone1;
	int k = vip1.judgephone(filename);
	switch (choose1)
	{
	case 1:
		if (k) {
			while (1) {
				cout << "请输入密码:\n";                           //用密码加以验证,实现登录功能
				cin >> vip1.password;
				int m = vip1.judgepass(filename);
				if (m) {
					break;
					//成功登录
				}
				else cout << "密码错误\n";
			}
		}
		else {
			cout << "该手机号不存在,请选择:1 重新输入手机号,2 注册";
			int choose2;
			cin >> choose2;
			switch (choose2) {
			case 1:
				do {
					cin >> vip1.phonenumber;
				} while (!vip1.judgephone(filename));
				while (1) {
					cout << "请输入密码:\n";                           //用密码加以验证,实现登录功能
					cin >> vip1.password;
					if (vip1.judgepass(filename)) {
						break;
						//成功登录
					}
					else cout << "密码错误\n";
				}
				break;
			case 2:
				//转到注册
				cout << "是否用已输入的手机号注册(Y/N):";
				char a;
				cin >> a;
				if (a == 'N') {
					cin >> vip1.phonenumber;
				}
				if (vip1.judgephone(filename)) {
					cout << "该手机号已注册会员,请重新输入:";
					do {
						cin >> vip1.phonenumber;
					} while (vip1.judgephone(filename));
				}
				vip1.Append(filename);
				//注册结束,成功登录
				break;
			default: return;break;
			}
		}
		break;

	case 2:
		vip1.Append(filename);
		//注册结束,成功登录
		break;
	default:return;break;
	}
}
int main() {
	fstream file1("C:\\Users\\lenovo\\Desktop\\1.txt", ios::in | ios::out | ios::binary);
	fstream file2("C:\\Users\\lenovo\\Desktop\\2.txt", ios::in | ios::out);
	VIP vip;
	do {
		file2 >> vip.phonenumber >> vip.password >> vip.money >> vip.score >> vip.key;
		file1.write((char*)&vip, sizeof(VIP));
	} while (vip.phonenumber != 0);
	file1.close();
	file2.close();
	cout << "请输入手机号:";
	double phone1, phone2 = 0;
	cin >> phone1;
	login("C:\\Users\\lenovo\\Desktop\\1.txt", phone1, phone2);
}

在第二次调用judgepass或judgephone二者之一会出现引发了未经处理的异常:读取访问权限冲突。
**_Pnext** 是 0xFFFFFFFFFFFFFFFF。问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值