Оператор If не выдает cout после первой попытки

#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;