基本的C ++(我觉得cout缓冲区还是溢出?!)

时间:2014-08-29 15:34:24

标签: c++ windows codeblocks

好的,所以我是C ++的新手,我试图建立一个基本的登录程序。 iv除了一个问题之外让它工作......这就是iv得到的

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;



}

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

我需要知道如何清除溢出或缓冲区或其他东西...... 请帮助:)

2 个答案:

答案 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(错误登录)时,它将再次尝试,当它不是真的(良好的登录)时,它将继续下一段代码。