2015-08-29 4 views
-1

Я создал программу, которая получает пароль от пользователя. Пользователь также может изменить пароль, сохранив исходный пароль в строке, а затем старый пароль в новой строке, но если оба совпадают, пользователь может ввести новый пароль, но даже если я введу тот же пароль в обеих новых и старых строках, if оператор не возвращает true, и пароль не изменяется. 2nd, когда я ввожу пароль и нажимаю клавишу ввода, ввод также сохраняется в пароле. Вот мой кодC++ - мой пароль Программа не меняется Пароль

void password(int n) 
{ 
    string pass = "0", oldpass = "0"; 
    char ch = '0'; 
    if (n) 
    { 
     cout << "Enter Old Password: "; 
     ch = _getch(); 
     while (ch != '\r') 
     { 
      oldpass.push_back(ch); 
      cout << "*"; 
      ch = _getch(); 
     } 
     cout << "Password is " << oldpass << endl; 
     if (oldpass == pass) 
     { 
      cout << "Enter New Password: "; 
      ch = _getch(); 
      while (ch != '\r') 
      { 
       pass.push_back(ch); 
       cout << "*"; 
       ch = _getch(); 
      } 
     } 
     else 
     { 
      cout << "\nPassword Does Not Match" << endl; 
      system("pause"); 
     } 
    } 
    else 
    { 
     cout << "No Password Found. Enter New Password... "; 
     ch = _getch(); 
     while (ch != '\r') 
     { 
      pass.push_back(ch); 
      cout << "*"; 
      ch = _getch(); 
     } 
     cout << "Password is " << pass<<endl; 
     cout << "\nPassword Saved Successfully" << endl; 
     system("pause"); 
    } 
} 

ответ

0

Введите не хранится в пароле.

Ваша инициализация по умолчанию «0» есть и в конечном итоге будет отбрасывать вас. Начните с пустых строк.

Также вы никогда не сбрасываете значение ни одного из паролей, оба добавляются при каждом вызове с использованием string.push_back (char). И помните, что переменные в функциях не сохраняются, поэтому каждый вызов после этого функции будет деформировать переменные на их инициализированные значения.

Хорошим методом отладки является отображение значений обеих строк при запросе на старый пароль; вы увидите, что при каждом вызове функции по умолчанию обе строки равны «0», и если вы используете цикл внутри функций, каждый цикл добавит больше символов к строке, а не переписывает строки со строками, ожидаем.

В принципе, в какой-то момент, до или после присвоений любой строки, вам придется удалить предыдущие значения в строках, прежде чем повторно использовать их.

+0

Получил это Большое спасибо. Только одна вещь объявляет строку и не инициализирует ее, делает ее пустой строкой. Я думал, что у него есть стоимость мусора? – SAIFI369

+0

Строка не является примитивным типом данных: int, float, double, char и т. Д. String - это класс и обрабатывает исключения, которые нет в строках c-style. Так что нет, если вы не инициализируете объект String, он установит, что размер по умолчанию по умолчанию равен 0, не будет содержать никаких символов и будет обрабатывать вызовы самому себе. В то время как строки c-style представляют собой массив символов и будут иметь память символов, равную ее размеру, независимо от того, была ли инициализирована память или нет. – Dalphat

+0

Хорошо, я понимаю, и что вы сказали о каждой функции pushback? – SAIFI369

Смежные вопросы