C++ 表现得像或是?

C++ 表现得像或是?,c++,C++,我计算一个输入并将其结果(由空格分隔)分配给两个变量。不幸的是,如果user==“user”或password==“pass”,那么它似乎打破了循环 #include <iostream> #include <string> using namespace std; int main() { string username; string password; do {

我计算一个输入并将其结果(由空格分隔)分配给两个变量。不幸的是,如果user==“user”或password==“pass”,那么它似乎打破了循环

    #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";
    }
#包括
#包括
使用名称空间std;
int main()
{
字符串用户名;
字符串密码;
做{
coutusername>>密码;
cin.ignore();
}while(username!=“user”&&password!=“pass”);

你真的需要一个OR吗

while (username != "user" || password != "pass");

<这不是一个C++问题,而是一个布尔逻辑问题。例如:

< p>为了理解你的错误,现在是时候看法律:

“not(A或B)”与“(not A)和(not B)”相同

因此,您的代码就像编写:

!(username == "user" || password == "pass")

只要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"));
#包括
#包括
使用名称空间std;
int main()
{
字符串用户名;
字符串密码;
标签:
coutusername>>密码;
cin.ignore();
如果((用户名!=“用户”)| |(密码!=“通过”))
后藤标签;

coutUmm…天哪,我要睡觉了。最容易获得声誉:-)哈哈,不客气。我实际上是一个相当好的程序员,我只是…我甚至不知道。&&is和,| is或,^is Xoryo你的逻辑有缺陷。你想要| |这里是OR。如果用户名错误或密码错误,你想重复这个循环。布尔逻辑需要一点实践e、 在你写了第1000条条件语句后,这将成为你的第二天性。只希望密码中不包含空格。最近有人给我看了。从那以后,我就忍不住想象出合适的“更正”对于这样编写输入验证代码的人。条件中的大括号是多余的,因为&&operator的优先级低于!=operator。无论您是否将&&operator放在大括号中,编译器都将以相同的方式处理表达式。此外,这将产生与原始OP程序相同的结果(当您输入“user”时)如果我能再次投反对票,我会这样做,因为使用
goto
goto
是邪恶的,因为它破坏了程序流的逻辑(事实上,它是反面向对象的)所以通过使用goto,你实际上降低了程序的可读性。不同的例子,更快。用什么术语来说更快?令人惊讶的是,在你修正逻辑之前,你得到了一张赞成票。
#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";
}