基本C++(我认为是cout缓冲区还是溢出?!)

basic C++ (cout buffer or overflow i think?!)

本文关键字:溢出 缓冲区 C++ 认为是 cout 基本      更新时间:2023-10-16

ok,所以我对C++有点陌生,我正在尝试构建一个基本的登录程序。除了一个问题,我让它工作了。。。这就是我得到的

void InitialLogin()
{
        cout << "tt   ===========LOGIN==========" << endl;
        cout << "tnnntUsername/>> " ;
        getline(cin, sUsername);
        cout << "tntPassword/>> ";
        getline(cin, sPassword);
    if (sUsername == "myname" && sPassword == "mypass")
     {
        cout << "nttt--ACCESS GRANTED--";
        system("CLS");
     }
        else if (sUsername != "myname" && sPassword != "mypass")
        {
            SetConsoleTextAttribute(h, FOREGROUND_RED);
            cout << "nttt--ACCESS DENIED--nnn";
            SetConsoleTextAttribute(h, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            main();
        }
}

在我运行这个之后,如果登录成功,我会在屏幕被清除后运行以下程序。。。

void Initialization()
{
    cout << "/>> Aquireing file list......" << endl;
    cout << "/>> file list aquired........" << endl;
    cout << "/>> determing file location.." << endl;

}

现在我的问题是,如果我的用户名或密码错了,比如说,一旦我得到了两次初始化输出,如果我错了两次,输出就是三次。

我需要知道如何清除溢出或缓冲区之类的。。。请帮助:)

您的函数正试图调用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;
}

我觉得你得到这个是因为当密码和用户名都不正确时,你调用main()函数(顺便说一句,你可能想把这个检查中的&&更改为||,因为如果密码或用户名不正确,你想拒绝访问)。

您可能需要考虑让InitialLogin()函数返回一个bool来显示登录是否成功。如果不是,则让它再次运行InitialLogin()如果成功,则让其继续执行代码。

在调用InitialLogin()的地方,可以使用while循环使其重复。

while(!InitialLogin()){}

因此,当InitialLogin()不是false(错误登录)时,它将重试,当它不是true(正确登录)时将继续执行下一段代码。