#c
#c
Вопрос:
Почему оператор if не выдает cout после первой попытки, не уверен, что здесь происходит, как я могу заставить этот цикл работать?
srand(time(0) );
int random = rand();
int pswd = (random);
std::cout << pswd << endl;
int pswdattempt;
std::cin >> pswdattempt;
while (pswdattempt != pswd) {
if (pswdattempt == pswd) {
std::cout << "Access Granted" << endl;
}
else {
std::cin >> pswdattempt;
}
Ответ №1:
Я вижу две проблемы с вашим кодом. Во-первых, rand()
функция генерирует псевдослучайное число между 0 и некоторым довольно большим числом, обычно не менее 32 КБ. Это означает, что вы можете сидеть там некоторое время, ожидая, чтобы угадать правильное число. В целях тестирования попробуйте сгенерировать число от 0 до 10. Затем, при правильном предположении, завершите while
цикл:
srand(time(0) );
int random = rand() % 10;
int pswd = (random);
std::cout << pswd << endl;
int pswdattempt;
do {
std::cout << "Please enter a password";
std::cin >> pswdattempt;
if (pswdattempt == pswd) {
std::cout << "Access Granted" << endl;
break;
}
} while (true);
Комментарии:
1.
if
Условие выполнения инструкции true никогда не будет выполнено2. угадать ответ не будет проблемой, он отображается пользователю при запуске
Ответ №2:
предполагая, что вы закрываете while
в полном скрипте, и что это внутри функции, в противном случае srand вряд ли будет работать.
обратите внимание, что если ввод правильный при первом вводе (перед циклом), он будет явно исключен while (pswdattempt != pswd)
.
аналогично, если в приглашении в цикле указано правильное целое число, то цикл не будет перезапущен, поэтому if (pswdattempt == pswd)
все равно не будет достигнуто.
по сути, вам нужен поток, который запрашивает ввод, затем выполняет условие, возвращаясь к подсказке, если оно не выполнено, или завершая цикл, чтобы продолжить предоставление доступа или раздачу шоколада, если выполнено правильно.
(редактировать) если cout по-прежнему ничего не выдает, я немного не в курсе, но я вижу, что вы не установили use namespace std;
глобально, поэтому, возможно, каждый endl;
должен быть std::endl;