在下面的代码中,我一直试图让它检查多个参数(检查用户名和密码是否正确时)。
string username;
string password;
cout << "Hello there. To access this program, please put in your user name and password." << endl;
cout << "Username: ";
cin >> username;
cout << "Password: ";
cin >> password;
if(username != "admin", password != "therealpassword"){
do{
cout << "Username or password is incorrect." << endl;
cout << "Username: ";
cin >> username;
cout << "Password: ";
cin >> password;
}while(username != "admin", password != "therealpassword");
}
无论出于何种原因,在运行程序时我输入了错误的用户名,但密码正确,它允许我登录。在(do ... while)部分,如果我输入了错误的用户名,但又输入了正确的密码,即使用户名不正确,我也可以正确登录。如何检查用户名和密码?任何和所有的帮助表示赞赏。
答案 0 :(得分:4)
逗号不会按照您的想法执行。您需要逻辑AND运算符&&
或逻辑OR ||
。在您的情况下,如果两个条件都为真,您希望if
为false。所以
将您的if
声明更改为if( !( (username == "admin" ) && (password == "therealpassword" )) )
我会说更好的是使用string.compare
if( !( (username.compare("admin") == 0) && (password.compare("therealpassword") == 0) ) )
如果其中任何一个为假,则您希望为true,因此它需要是逻辑OR ||
。
while( (username.compare("admin") != 0) || (password.compare("therealpassword") != 0) )
更简单的方法是使用do
while
循环并完全忘记if
语句。
答案 1 :(得分:2)
逗号运算符应替换为“||”或“或”。参数可以有两种基本方式相关,一种是逻辑“和”(“&amp;&amp;”),一种是逻辑“或”(“||”)。当两个条件必须为真时,你使用第一个条件;如果其中一个条件必须为真,则使用第二个条件(如果它们都是真的则无关紧要)。如果你把一个逗号运算符,只考虑第二个参数,那不是你想要的。
答案 2 :(得分:1)
如果您的目标是检查密码和用户名是否都正确,则if语句应如下所示:
If( ( username.compare(“admin”) == 0) || ( password.compare(“therealpassword”) ==0) )
继续获取用户和密码,直到找到合适的用户和密码。您可以将代码重写为:
string username;
string password;
cout << "Hello there. To access this program, please put in your user name and password." << endl;
do{
cout << "Username: ";
cin >> username;
cout << "Password: ";
cin >> password;
if( username.compare("admin") || password.compare(“therealpassword") ){
cout << "Username or password is incorrect." << endl;
}
}while( username.compare("admin") || password.compare(“therealpassword") );