Помощь в подсчете паролей - PullRequest
0 голосов
/ 02 апреля 2012
void getPassword()
{
  while (true)
  {
    string password;
    cout << "Enter the password: ";
    getline(cin, password);

  if (password == "123456") break;
  cout << "INVALID. ";
  } // while
} // getPassword 



int main()
{
  getPassword();

  double P;
  double r;
  double N = 360;
  double rate; 


  cout << "What's the mortgage amount? ";
  cin >> P;
  cin.ignore(1000, 10);  

  cout << "What's the annual interest rate? ";
  cin >> r;
  cin.ignore(1000, 10); 

  rate = r / 100 / 12; 

  // (p * (1 + r)n * r) / ((1 + r)n - 1)
  double M = P * ((pow))(1 + rate, N) * rate / (((pow))(1 + rate, N) -1);

  cout.setf(ios::fixed|ios::showpoint); 
  cout << setprecision(2);

  cout << "Principal = $" << P <<  endl;

  cout.unsetf(ios::fixed|ios::showpoint);
  cout << setprecision(6); // resets precision to its default 
  cout << "Interest Rate = " << r << "%" << endl; 
  cout << "Amortization Period = " << N / 12 << " years" << endl;

  cout << "The monthly payment = $" << M << endl;


  ofstream fout;
  fout.open("mortgages.txt", ios::app);
  if (!fout.good()) throw "I/O error";
  fout.setf(ios::fixed|ios::showpoint); 
  fout << setprecision(2);

  fout << "Principal = $" << P <<  endl;

  fout.unsetf(ios::fixed|ios::showpoint);
  fout << setprecision(6); // resets precision to its default 
  fout << "Interest Rate = " << r << "%" << endl; 
  fout << "Amortization Period = " << N / 12 << " years" << endl;

  fout << "The monthly payment = $" << M << endl;
  fout.close(); 

  return 0;
} 

Что случилось, ребята? У меня есть домашнее задание для comsc, и я наткнулся на контрольно-пропускной пункт в моей последней программе. То, что я пытаюсь сделать, - это ограничить пользователя этой программы 3 попытками неверного пароля. Нужно ли менять это на подпрограмму, возвращающую значение, или я могу сделать это без этого? Любая помощь будет высоко ценится!

1 Ответ

3 голосов
/ 02 апреля 2012

Самым простым способом было бы изменить getPassword так, чтобы он возвращал bool, который означает, что пользователь ввел правильный пароль.Тогда вместо while (true), скажем for (int i = 0; i < 3; ++i) ... и вместо break, return true.После цикла return false, так как они прошли 3 раунда без ввода правильного пароля.

В остальной части программы, вместо простого вызова getPassword, проверьте ее возвращаемое значение.Если значение равно false, выведите сообщение об ошибке и выйдите.

Что-то вроде:

bool checkPassword() {  // renaming this, since it doesn't just *get* a password
    for (int i = 0; i < 3; ++i) {
        string password;
        std::cout << "Enter password: " << std::flush;
        std::getline(std::cin, password);
        if (password == "123456") return true;
        std::cout << "INVALID.\n";
    }
    std::cout << "Maximum attempts exceeded.\n";
    return false;
}

int main() {
    if (!checkPassword()) {
        return 1;
    }

    ... rest of main() here ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...