代码运行debug
这种错误要怎么改呢
部分代码:
#include <iostream>
#include<fstream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int Card_Number=0;
int UserNumber = 0;
struct User {
char key[50];
char Card_Number[20];
char name[50];
double money;
}user[100000];
void First_Menu() {
printf("|--------------------------------------|\n");
printf(" \n");
printf("| ATM机存取款管理系统 |\n");
printf(" \n");
printf("|--------------------------------------|\n");
printf(" \n");
printf("| |\n");
printf(" 登录-------1 \n");
printf("| |\n");
printf(" \n");
printf("|--------------------------------------|\n");
}
void Login_Menu() {
printf("|--------------------------------------|\n");
printf(" \n");
printf("| 欢迎您进入登录页面 |\n");
printf(" \n");
printf("|--------------------------------------|\n");
printf(" \n");
printf(" \n");
}
void Successfullogin_Menu() {
printf("|--------------------------------------|\n");
printf(" \n");
printf("| ATM机存取款管理系统 |\n");
printf(" \n");
printf("|--------------------------------------|\n");
printf(" \n");
printf("| |\n");
printf(" 取款-------2 \n");
printf("| |\n");
printf(" 查询余额-------3 \n");
printf(" |\n");
printf(" 更改密码-------4 \n");
printf(" |\n");
printf(" 锁卡-------5 \n");
printf(" |\n");
printf(" 退卡-------6 \n");
printf("|--------------------------------------|\n");
}
void GetMoney_Menu() {
printf("|--------------------------------------|\n");
printf(" \n");
printf("| 取款 |\n");
printf(" \n");
printf("|--------------------------------------|\n");
printf("请注意取款金额勿超过20000(单笔最大金额)以及卡内余额!!");
}
void Save() //更新用户信息(学习效仿csdn博主)
{
FILE* fp=NULL;
if ((fopen("D:\\C++\\Bank statistic.txt", "wb")) != NULL)
{
for (int i = 1; i <= UserNumber; i++)
{
fwrite(&user[i], sizeof(struct User), 1, fp);
}
fclose(fp);
}
else
{
printf("\n用户信息更新失败");
}
}
void TiQu() //提取用户信息(学习效仿csdn博主)
{
UserNumber = 0;
FILE* fp=NULL;
if ((fp=fopen("D:\\C++\\Bank statistic.txt", "rb")) != NULL)
{
while (!feof(fp))
{
fread(&user[++UserNumber], sizeof(struct User), 1, fp);
}
fclose(fp);
}
else printf("\n用户信息加载失败");
UserNumber--;
}
class Operation {
private:
char Card_Number[50];
char Card_Key[50];
public:
Operation(const char* cardNumber, const char* cardKey) {
strcpy(Card_Number, cardNumber);
strcpy(Card_Key, cardKey);
}
void Login_Account() {
int i = 0;
char a[20] = {};
char b[20] = {};
int count = 0;
std::ifstream fp;
fp.open("D:\\C++\\Bank statistic.txt", std::ios::in);
if (!fp.is_open()) {
std::cout << "打开文件失败!!!!\n";
return;
}
std::cout << "请输入卡号:";
std::cin.getline(a, sizeof(a) - 1);
std::cin.ignore(); // 清除输入缓冲区中的换行符
std::cout << "请输入密码:";
std::cin.getline(b, sizeof(b) - 1);
std::cin.ignore(); // 清除输入缓冲区中的换行符
int fff = 0;
char cardNumber[20];
char cardKey[20];
while (fp >> cardNumber >> cardKey) {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
if (strcmp(a, cardNumber) == 0 && strcmp(b, cardKey) == 0) {
fff = 1;
break;
}
i++;
}
fp.close();
if (!fff) {
printf("\n");
printf("\t\t\t\t\t用户名或者密码输入错误!请重新输入!\n");
count++;
if (count == 3) {
printf("\n");
printf("密码错误次数已达到3次,即将退出系统");
system("pause");
}
}
else {
printf("密码正确,正在登陆中");
Successfullogin_Menu();
}
}
void GetMoney() {
int moneyWanted = 0;
int moneyMax = 20000;
std::ifstream fp;
fp.open("D:\\C++\\Bank statistic.txt", std::ios::in);
printf("请输入取款金额:");
scanf_s("%d", &moneyWanted);
if (moneyWanted > 20000)
{
printf("已超过最大取款金额,请重新输入");
GetMoney_Menu();
}
int moneyRest;
while (fp >> moneyRest) {
if (moneyRest >= moneyWanted) {
moneyRest = moneyRest - moneyWanted;
Save();
Successfullogin_Menu();
}
else {
printf("已超过银行卡余额,请重新输入");
GetMoney_Menu();
}
}
}
一般出现这种问题,你点一下窗口的继续 就能看到崩溃的位置,然后看一下调用堆栈是哪里的问题。这个意思是 stack overflow 栈溢出。
我不确定 >> 可以赋值给 char 数组,你可以把 char数组改成 std::string