运行后,一打开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