在条件语句中使用多个参数

时间:2018-04-14 03:55:07

标签: c++ if-statement do-while

在下面的代码中,我一直试图让它检查多个参数(检查用户名和密码是否正确时)。

 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)部分,如果我输入了错误的用户名,但又输入了正确的密码,即使用户名不正确,我也可以正确登录。如何检查用户名和密码?任何和所有的帮助表示赞赏。

3 个答案:

答案 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") );