为什么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;
}
答案 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);