问题遇到的现象和发生背景
希望在打开文件时如果文件打开失败(无此文件),就循环让用户输入,直到输入的文件名能打开。
程序现状:
1.第一次输入能打开就没问题。
2.第一次输入打开失败后反复输入错误的文件名也没事
3.在输入错误的文件名后输入正确的文件名程序崩溃
用代码块功能插入代码,请勿粘贴截图
问题代码:
string a, b, c, d;
cout << "请输入用户名\n";
cin >> b;
c = b + ".txt";
ifstream infile;
infile.open(c.data());
int q = 0;
q = infile.is_open();
while(q == 0)
{
cout << "无此用户!请重新输入用户名!\n";
infile.close();
cout << "请输入用户名\n";
cin >> b;
c = b + ".txt";
ifstream infile;
infile.open(c.data());
q = infile.is_open();
}
getline(infile, a);
全代码
h:
#pragma once
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<windows.h>
#include<cstring>
#include<string>
#include<fstream>
#include <cassert>
using namespace std;
void login()
{
string a, b, c, d;
cout << "请输入用户名\n";
cin >> b;
c = b + ".txt";
ifstream infile;
infile.open(c.data());
int q = 0;
q = infile.is_open();
while(q == 0)
{
cout << "无此用户!请重新输入用户名!\n";
infile.close();
cout << "请输入用户名\n";
cin >> b;
c = b + ".txt";
ifstream infile;
infile.open(c.data());
q = infile.is_open();
}
getline(infile, a);
a=a.substr(7);
int ans = 0;
if (a == b) ans++;
cout << "请输入密码\n";
getline(infile, a);
a = a.substr(5);
while (1)
{
cin >> b;
if (a == b) ans++;
if (ans == 2) cout << "登陆成功!\n";
else cout << "密码错误!请重新输入密码!\n";
}
infile.close();
}
void register_lsq()
{
cout << "请输入用户名\n";
char filename[100000000];
ofstream a;
scanf("%s", filename);
string name = filename;
strcat(filename, ".txt");
a.open(filename, ios::out);
string password;
cout << "请输入密码\n";
cin >> password;
a << "用户名:"<<name<<"\n"<<"密码:" << password << "\n" << "分数:0";
a.close();
cout << "是否登录?\n"<<"登录请按1,退出请按2\n";
int key;
cin >> key;
if (key == 1) login();
else return;
}
void log_first()
{
system("color F0");
std::cout << "欢迎使用";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_INTENSITY |
FOREGROUND_RED| FOREGROUND_BLUE);
std::cout << "无敌暴龙战神";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_INTENSITY |
FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
std::cout<<"单词软件\n" << "首次使用请输入1\n已有账户请输入2\n管理员登录请按3\n";
int key;
std::cin >> key;
if (key == 1)
{
register_lsq();
}
if (key == 2)
{
login();
}
}
main:
#include"lsq.h"
using namespace std;
int main()
{
log_first();
return 0;
}