【问题标题】:Using multiple parameters in conditional statements在条件语句中使用多个参数
【发布时间】:2018-04-14 03:55:06
【问题描述】:

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

 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) 部分,如果我输入了错误的用户名,但再次输入了正确的密码,即使用户名不正确,我仍然可以正确登录。我怎样才能得到它来检查用户名和密码?感谢您提供任何和所有帮助。

【问题讨论】:

  • 只是为了让代码的行为更清晰:逗号运算符, 是一个序列点。换句话说,如果您在表达式中写入a, b(就像您在if 条件中所做的那样),它将评估a,丢弃它的值,评估b,然后返回它的值。这就是为什么只要密码正确,您的条件总是被评估为true

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


【解决方案1】:

逗号并不像你认为的那样。您需要逻辑 AND 运算符 &amp;&amp; 或逻辑 OR ||。在您的情况下,如果两个条件都为真,您希望 if 为假。所以

将您的 if 语句更改为 if( !( (username == "admin" ) &amp;&amp; (password == "therealpassword" )) )

我会说更好的是使用string.compare

if( !( (username.compare("admin") == 0) && (password.compare("therealpassword") == 0) ) )

如果其中一个为假,则您希望为真的 while 语句,因此它需要是逻辑 OR ||

while( (username.compare("admin") != 0) || (password.compare("therealpassword") != 0) )

更简单的方法是使用 do while 循环并完全忘记 if 语句。

【讨论】:

  • 但那是检查两个语句是否为真,如果只有一个或另一个是错误的,那么登录仍然是成功的。如果只有其中一个(用户或密码)错误,我需要它来停止登录。
  • @Hamed 有趣的是,如果这确实有效,, 的直观含义实际上是逻辑与
  • @Hamed 我说的是“自然语言”,在我最初的评论中我说的是“如果这确实有效”(ifsuppose 相同)。所以,如果operator, 确实组成了布尔表达式,那么它肯定会表示“和”而不是“或”。
  • @AluanHaddad 在我的语言中也是如此,“这个,这个和那个”。很好的理由来证明最初的答案。
  • @Hamed 是的。我试图证明这个答案的合理性,因为它最初是制定的。由于在 C++ 中 operator, 实际上是可重载的,这并不完全是学术性的;)
【解决方案2】:

逗号运算符应替换为“||”或“或”。有两种基本方式可以关联参数,一种是逻辑“与”(“&&”),一种是逻辑“或”(“||”)。当两个条件都必须为真时,您使用第一个,如果其中一个条件必须为真,则使用第二个(如果两个条件都为真,则无关紧要)。如果您放置逗号运算符,则只会考虑第二个参数,这不是您想要的。

【讨论】:

    【解决方案3】:

    如果您的目标是检查密码和用户名是否正确,则 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") );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2019-03-01
      • 2013-06-17
      • 2011-09-12
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多