C++代码运行debug(Run-Time Check Failure)

代码运行debug

img

这种错误要怎么改呢

部分代码:
#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