有没有厉害的程序员看一下这个代码bug在那里

运行后,一打开read_out函数,就会无限刷屏,无法操作。

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
char name[20][20];
int l_name[20];
char mi[20][20];
int l_m[20];
char in_name[50];
char in_mi[50];
char he_mi[50];
int end[20];
int n=0;
char ru;
int quit;
char s;
string text[20][200];
string text_name[20][200];
int text_ge[20];
int text_long[20][200];
int now[20];
double o,p,q;
char the_outname[7]= {'0','0','1','.','t','x','t'};
int the_out_ge[5];
char the_inname[7];
double suan(double a,double b,char c) {
    double out;
    if(c=='+')out=a+b;
    if(c=='-')out=a-b;
    if(c=='/')out=a/b;
    if(c=='*')out=a*b;
    return out;
}
void outname(int a) {
    int b;
    b=l_name[a];
    for(int i=0; i<b; i++) {
        cout<<name[a][i];
    }
    cout<<endl;
}
bool right(char a[],char b[],int c,int d) {
    if(c!=d)return false;
    for(int i=0; i<c; i++) {
        if(a[i]!=b[i])return false;
    }
    return true;
}
int find_user_name(char a[],int b) {
    int k;
    bool finda;
    for(int i=0; i<=n; i++) {
        finda=true;
        if(b==l_name[i]) {
            for(int j=0; j<b; j++) {
                if(a[j]!=name[i][j]) {
                    finda=false;
                    break;
                }
            }
            if(finda==true) {
                return i;
            }
        }
    }
    return -1;
}
int find_user_mi(char a[],int b) {
    int k;
    bool finda;
    for(int i=0; i<=n; i++) {
        finda=true;
        if(b==l_m[i]) {
            for(int j=0; j<b; j++) {
                if(a[j]!=mi[i][j]) {
                    finda=false;
                    break;
                }
            }
            if(finda==true) {
                return i;
            }
        }
    }
    return -1;
}
string in_thename;
void out_text(int user) {//文本编辑
    while(1) {
        system("cls");
        if(text_ge[user]==0) {
            cout<<"列表空空如也"<<endl;
            now[user]=0;
        } else {
            for(int i=0; i<text_ge[user]; i++) {
                cout<<char(i+'a')<<" "<<text_name[user][i]<<endl;
            }
            now[user]=text_ge[user];
        }
        cout<<"输入1以创建新的"<<endl;
        cout<<"输入2以导出文本"<<endl;
        cout<<"输入3以导入文本"<<endl;
        cout<<"输入4以退出文本编辑"<<endl;
        cin>>ru;
        if(ru=='1') {
            cout<<"输一个标题来开始吧!"<<endl;
            cout<<"标题:";
            cin>>text_name[user][now[user]];
            Sleep(500);
            system("cls");
            cout<<"内容:"<<endl;
            cin>>text[user][now[user]];
            cout<<"恭喜,你已完成了第"<<now[user]+1<<"个文本的编辑!"<<endl;
            Sleep(1000);
            text_ge[user]++;
        } else if(ru>='a') {
            int fah;
            for(int i=0; i<text_ge[user]; i++) {
                if(ru==(char(i+'a'))) {
                    fah=i;
                    break;
                }
            }
            cout<<text_name[user][fah]<<endl;
            cout<<text[user][fah]<<endl;
            cout<<"按下a键退出"<<endl;
            cin>>ru;
            ru=' ';
        }
        if(ru=='2') {
            if(text_ge[user]==0) {
                cout<<"当前无文件可导出,请创建文件后导出"<<endl;
                Sleep(1000);
                continue;
            }
            cout<<"请选择您要导出的文件"<<endl;
            for(int i=0; i<text_ge[user]; i++) {
                cout<<char(i+'a')<<" "<<text_name[user][i]<<endl;
            }
            cin>>ru;
            int faa;
            for(int i=0; i<text_ge[user]; i++) {
                if(ru==(char(i+'a'))) {
                    faa=i;
                    break;
                }
            }
            the_outname[2]=the_out_ge[user]+1;
            the_out_ge[user]++;
            ofstream fout;
            fout.open(the_outname);
            fout<<text_name[user][faa]<<endl;
            fout<<text[user][faa]<<endl;
            fout.close();
            cout<<"导出成功!"<<" "<<"导出名称为:"<<the_outname<<endl;
            Sleep(1000);
            ru=' ';
        }
        if(ru=='3') {
            cout<<",由于该功能有bug,目前已经暂时关闭,无法打开"<<endl;
            continue;
            cout<<"导入小助手:由于作者水平有限,输入的文件名称只能是7个字符,不能含有中文"<<endl;
            cout<<"例:001.txt 正确"<<endl;
            cout<<"例:测试文件.txt 错误"<<endl;
            cout<<"导入文件名称:";
            cin>>the_inname;
            freopen(the_inname,"r",stdin);
            cin>>text[user][now[user]];
            fclose(stdin);
            cout<<"因水平有限,请您输入文件名称:";
            cin>>in_thename;
            text_name[user][now[user]]=in_thename;
            now[user]++;
            cout<<"导入成功!"<<endl;
            ru=' ';
        }
        if(ru=='4') {
            cout<<"退出中……"<<endl;
            system("cls");
            return;
        }
    }
    return;
}
struct from {
    int n;//所属盘
    int bian;//所属程序下标
    int text_b;//创造的文本文件的下标
    string name;//程序名字
};
struct pan {
    int pange;
    string name[10];
    bool right[10]= {false};
    from exe[10][100];
    int all_exe[10];//所有的程序
} panz[20];
void userpan(int user) {
    while(1) {
        cout<<"磁盘"<<endl;
        int fah;
        if(panz[user].pange!=0) {
            for(int i=0; i<panz[user].pange; i++) {
                cout<<char(i+'a')<<" "<<panz[user].name[i]<<endl;
            }
        }
        if(panz[user].pange==0)cout<<"无"<<endl;
        cout<<"输入1以创建新磁盘"<<endl;
        cout<<"输入2以更改磁盘名"<<endl;
        cout<<"输入3以退出"<<endl;
        cin>>ru;
        if(ru=='3') {
            return;
            cout<<"退出失败"<<endl;
        }
        if(ru=='1') {
            if(panz[user].pange==19) {
                cout<<"磁盘创建已达上限"<<endl;
            } else if(panz[user].pange<19) {
                panz[user].pange++;
                panz[user].right[panz[user].pange-1]=true;
                cout<<"输入你的磁盘名:";
                cin>>panz[user].name[panz[user].pange-1];
                cout<<"磁盘创建成功!"<<endl;
            }
        }
        if(ru=='2') {
            string runame;
            bool findit=false;
            int k;
            cout<<"请输入您想改的磁盘的原名字";
            cin>>runame;
            for(int i=0; i<panz[user].pange; i++) {
                if(panz[user].name[i]==runame) {
                    k=i;
                    findit=true;
                    break;
                }
            }
            if(findit==false) {
                cout<<"输入有误"<<endl;
                Sleep(1000);
                system("cls");
                continue;
            }
            cout<<"请重新输入磁盘名称:";
            cin>>panz[user].name[k];
            cout<<"修改成功!"<<endl;
            Sleep(1000);
            system("cls");
        }
        
        if(ru>='a') {
            for(int i=0; i<panz[user].pange; i++) {
                if(ru==(char(i+'a'))) {
                    fah=i;
                    break;
                }
            }
            system("cls");
            while(1) {
                cout<<panz[user].name[fah]<<"磁盘中的程序"<<endl;
                if(panz[user].all_exe[fah]==0)cout<<"无"<<endl;
                else {
                    for(int i=0; i<panz[user].all_exe[fah]; i++) {
                        cout<<char(i+'a')<<" "<<panz[user].exe[fah][i].name<<endl;
                    }
                }
                cout<<"输入1以创建文件"<<endl;
                cout<<"输入2以退出该磁盘"<<endl;
                cin>>ru;
                //if(ru=='1'){
                //    cout<<"你想创建哪种类型的文件?"<<endl;
                //    cout<<"1 文本文件"<<endl; 
                //    return;
                //}
                if(ru=='2') {
                    break;
                }
            }
        }
        system("cls");
    }
    return;
}
void start() {
    cout<<"使用text.1.0.0测试版本!"<<endl;
    cout<<"为了开始使用,您必须输入您的一些基本信息"<<endl;
    int li;
    while(1) {
        cout<<"请输入您的用户名:";
        cin>>in_name;
        li=strlen(in_name);
        if(li<20)break;
        cout<<"用户名过长,请重新输入"<<endl;
    }
    for(int i=0; i<=li; i++) {
        name[n][i]=in_name[i];
    }
    l_name[n]=li;
    system("cls");
    int lia,lh;
    while(1) {
        cout<<"请输入您的密码:";
        cin>>in_mi;
        cout<<"请确认您的密码:";
        cin>>he_mi;
        lia=strlen(in_mi);
        lh=strlen(he_mi);
        if(lia<50&&lh<50&&right(in_mi,he_mi,lia,lh))break;
        if(lia>50||lh>50) {
            cout<<"密码长度过长"<<endl;
            Sleep(1000);
            continue;
        }
        if(right(in_mi,he_mi,lia,lh)==false) {
            cout<<"两次输入的密码不一致"<<endl;
            Sleep(1000);
            continue;
        }
    }
    for(int i=0; i<=lia; i++) {
        mi[n][i]=in_mi[i];
    }
    l_m[n]=lia;
    system("cls");
    cout<<"恭喜你,你已经成功完成了注册!"<<endl;
    Sleep(1000);
    n++;
}
char book[10][40000];
char ininame[5]={'1','.','t','x','t'};
void read(){
    for(int i=0;i<9;i++){
        freopen(ininame,"r",stdin);
        cin.getline(book[i],400000,-1);
        ininame[0]++;
        fclose(stdin);
    }
    ru=' ';
}
void read_out(){
    while(1){
        cout<<"小说阅读器"<<endl;
        ininame[0]='1';
        for(int i=0;i<9;i++){
            cout<<char(i+'a')<<" "<<ininame<<endl;
            ininame[0]++;
        }
        cout<<"1 退出"<<endl;
        cin>>ru;
        if(ru=='1'){
            return;
        }
        else{
            int fah;
            for(int i=0; i<9; i++) {
                if(ru==(char(i+'a'))) {
                    fah=i;
                    break;
                }
            }
            cout<<book[fah]<<endl;
            cin>>ru;
            system("cls");
            continue;
        }
    }
}
int main() {
    for(;;) {
        system("cls");
        cout<<"登入"<<endl;
        cout<<"a 登录一个账号"<<endl;
        cout<<"b 注册一个账号"<<endl;
        cout<<"剩余账号余额:"<<(20-n)<<endl;
        cin>>ru;
        system("cls");
        if(ru=='a') {
            if(n==0) {
                cout<<"请先注册一个账号后再登陆"<<endl;
                Sleep(1000);
                continue;
            }
            quit=0;
            int l;
            int user;
            while(1) {
                cout<<"请输入您的用户名:";
                cin>>in_name;
                l=strlen(in_name);
                if(find_user_name(in_name,l)==-1) {
                    cout<<"未找到该用户"<<endl;
                } else {
                    user=find_user_name(in_name,l);
                    break;
                }
            }
            if(end[user]==1) {
                cout<<"非常,由于该用户密码错误次数上限已达,为了安全,该用户账号已经锁定,无法登陆"<<endl;
                Sleep(1000);
                continue;
            }
            system("cls");
            int w=3;
            
            while(1) {
                bool p=true;
                if(w==0||w<0) {
                    end[user]=1;
                    cout<<"非常,由于该用户密码错误次数上限已达,为了安全,该用户账号已经锁定,无法登陆"<<endl;
                    Sleep(1000);
                    quit=1;
                    break;
                }
                cout<<"请输入您的密码:";
                cin>>in_mi;
                int l=strlen(in_mi);
                if(l!=l_m[user]) {
                    cout<<"密码错误"<<endl;
                    w--;
                    cout<<"还剩下"<<w<<"次机会"<<endl;
                    p=false;
                    continue;
                }
                for(int i=0; i<l; i++) {
                    if(in_mi[i]!=mi[user][i]) {
                        cout<<"密码错误"<<endl;
                        w--;
                        cout<<"还剩下"<<w<<"次机会"<<endl;
                        p=false;
                        break;
                    }
                }
                if(p==true) {
                    break;
                }
            }
            if(quit==1)continue;
            cout<<"登陆成功"<<endl;
            the_out_ge[user]=int('0');
            while(1) {
                cout<<"用户:";
                outname(user);
                cout<<"a 两数计算器"<<endl;
                cout<<"b 文本"<<endl;
                cout<<"c 磁盘"<<endl;
                cout<<"g 小说阅读器"<<endl; 
                cout<<"d 注销"<<endl;
                cout<<"f 关机"<<endl;
                cin>>ru;
                if(ru=='g'){
                    read();
                    read_out();
                }
                if(ru=='a') {
                    system("cls");
                    cout<<"请勿输入字母"<<endl;
                    cin>>o>>s>>p;
                    if(p==0&&s=='/') {
                        cout<<"除数不能为0"<<endl;
                        Sleep(1000);
                        continue;
                    }
                    q=suan(o,p,s);
                    cout<<"="<<q<<endl;
                    Sleep(1000);

                }
                if(ru=='b') {
                    out_text(user);
                }
                if(ru=='c') {
                    userpan(user);
                    Sleep(1000);
                    system("cls");
                }
                if(ru=='d') {
                    cout<<"注销完成"<<endl;
                    Sleep(500);
                    break;
                }
                if(ru=='f') {
                    cout<<"关机完成"<<endl;
                    Sleep(500);
                    return 0;
                }
                system("cls");
            }
        }
        if(ru=='b') {
            if(n!=20)start();
            else {
                cout<<"非常:( ,由于测试所用账号余额已用完,您无法注册一个新的账号了"<<endl;
                Sleep(1000);
                system("cls");
            }
        }
    }
}

实在没有办法了,初步猜测问题出现在cin.getline(book[i],400000,-1);这一句和是哪个。这一句功能是可以读入回车,不知道有没有厉害的程序员能不能改掉这个BUG

char book[10][40000+1];
char ininame[5]={'1','.','t','x','t'};
void read(){
    for(int i=0;i<9;i++){
        freopen(ininame,"r",stdin);
        cin.getline(book[i],40000,'\n');//你原来这句明显多了一个0