如果第一次尝试后语句未给出提示

时间:2019-04-02 01:21:54

标签: 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;

    }

2 个答案:

答案 0 :(得分:0)

假设您关闭了完整脚本中的while,并且它位于一个函数之内,否则使用srand不太可能起作用。

请注意,如果第一个输入的输入正确(循环之前),则while (pswdattempt != pswd)将明确排除该输入。

同样,如果在循环提示中给出了正确的整数,则循环将不会重新开始,因此仍不会到达if (pswdattempt == pswd)

基本上,您需要一个提示输入的流程,然后尝试条件,如果未满足,则返回提示,否则退出循环以继续授予访问权限,或者在遇到正确情况时分配巧克力。

(edit)如果cout仍然没有产生任何效果,那么我在这里有点不深,但是我看到您没有全局设置use namespace std;,所以也许每个endl;应该是{{1} }

答案 1 :(得分:0)

我发现您的代码有两个问题。首先是rand()函数生成一个介于0和某个相当大的数字之间的伪随机数,通常至少为32K。这意味着您可能会坐在那里一会儿,等待猜测正确的号码。为了进行测试,请尝试生成一个介于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);