void InitialLogin()
{
cout << "\t\t ===========LOGIN==========" << endl;
cout << "\t\n\n\n\tUsername/>> " ;
getline(cin, sUsername);
cout << "\t\n\tPassword/>> ";
getline(cin, sPassword);
if (sUsername == "myname" && sPassword == "mypass")
{
cout << "\n\t\t\t--ACCESS GRANTED--";
system("CLS");
}
else if (sUsername != "myname" && sPassword != "mypass")
{
SetConsoleTextAttribute(h, FOREGROUND_RED);
cout << "\n\t\t\t--ACCESS DENIED--\n\n\n";
SetConsoleTextAttribute(h, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
main();
}
}
运行后,如果登录成功,我会在屏幕清除后进行以下运行......
void Initialization()
{
cout << "/>> Aquireing file list......" << endl;
cout << "/>> file list aquired........" << endl;
cout << "/>> determing file location.." << endl;
}
现在我的问题是,如果我得到用户名或密码错误说一旦我得到初始化输出两次,如果我错了两次,输出是三次。
我需要知道如何清除溢出或缓冲区或其他东西...... 请帮助:)
答案 0 :(得分:2)
您的功能正在尝试拨打main()
。这不是合法的C ++。
您应该返回状态以查看登录是否有效。然后循环直到状态变为“true”,或者用户已经没有机会。这是一个小例子:
bool InitialLogin();
int main()
{
int numChances = 3;
int numCount = 0;
bool loginOk = false;
while (numCount < numChances && !loginOk )
{
loginOk = InitialiLogin();
++numCount;
}
if ( !loginOk )
{
// number of chances ran out
return 0;
}
else
{
// proceed. Login was successful
}
}
bool InitialLogin()
{
//...
if (sUsername == "myname" && sPassword == "mypass")
{
//...
return true;
}
// anything here means that the login failed. There is no need for an if()
//...
return false;
}
答案 1 :(得分:0)
我觉得你得到这个,因为当密码和用户名都不正确时你正在调用main()函数(作为旁注,你可能想把这个检查中的&amp;&amp;和你想要的更改为||如果密码或用户名不正确,则拒绝访问。)
您可能需要考虑使用InitialLogin()函数返回bool以显示登录成功与否的天气。如果没有,如果成功则再次运行InitialLogin()然后让它继续执行代码。
在您调用InitialLogin()的位置,您可以使用while循环来重复它。
而(!InitialLogin()){}
因此,当InitialLogin()不是false(错误登录)时,它将再次尝试,当它不是真的(良好的登录)时,它将继续下一段代码。