我正在评估输入并将其结果(由空格分隔)分配给两个变量。不幸的是,如果用户==“用户”或密码==“通过”,它似乎打破了循环!
#include <iostream>
#include <string>
using namespace std;
int main()
{
string username;
string password;
do {
cout<<"Please enter the correct username and password.\n";
cin>>username>>password;
cin.ignore();
} while (username != "user" && password != "pass");
cout<<"username and password correct";
}
答案 0 :(得分:8)
你真的需要一个OR:
while (username != "user" || password != "pass");
这不是C ++问题,而是布尔逻辑问题。例如,请参阅De Morgan's laws。
答案 1 :(得分:4)
为了理解你的错误,现在是时候看看De-Morgan's法律:
“not(A或B)”与“(不是A)和(不是B)”
相同
所以你的代码就像写作:
!(username == "user" || password == "pass")
答案 2 :(得分:3)
只要while关键字后面指定的条件为true,do..while
循环就会继续执行。只要username != "user"
和 password != "pass"
,您就希望循环继续。
我们现在假设username == "user"
和password == "abc"
。然后将满足条件的第一部分,但第二部分不会。所以你的循环将结束。
您真正想做的是在username != "user"
或 password != "pass"
期间继续循环。您可以通过以下方式编写它:
(...)
while (username != "user" || password != "pass");
或者,更清楚一点:
while (!(username == "user" && pass == "pass"));
答案 3 :(得分:-2)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string username;
string password;
label:
cout<<"Please enter the correct username and password.\n";
cin>>username>>password;
cin.ignore();
if((username != "user") || (password != "pass"))
goto label;
cout<<"username and password correct";
}