C++ if语句 我是C++新手。 所以我做了这个程序,应该是密码之类的。 问题是,当我输入正确的密码(即bobby)时,它会直接进入else而不是if

C++ if语句 我是C++新手。 所以我做了这个程序,应该是密码之类的。 问题是,当我输入正确的密码(即bobby)时,它会直接进入else而不是if,c++,if-statement,C++,If Statement,有什么问题 我的代码: #include <iostream> using namespace std; int main() { char password[] = "bobby"; char passinput[50]; char num[50]; top: cout << "Please enter your password: " << endl; cin >> passinput; if(passinput==password) {

有什么问题

我的代码:

#include <iostream>
using namespace std;

int main()
{
char password[] = "bobby";
char passinput[50];
char num[50];

top: 
cout << "Please enter your password: " << endl;
cin >> passinput;
if(passinput==password)
{
    cout << "Correct" << endl;
    cin >> num; 
}
else
{
    cout << "Incorrect, try again" << endl;
    goto top;
}
}
ifpassinput==password只是比较两个字符串的起始地址。由于两个字符串位于不同的位置,因此条件passinput==password的计算结果为false,并且if主体未执行。 要比较两个c样式字符串,可以在中使用srtcmp标准库函数

ifpassinput==password只是比较两个字符串的起始地址。由于两个字符串位于不同的位置,因此条件passinput==password的计算结果为false,并且if主体未执行。 要比较两个c样式字符串,可以在中使用srtcmp标准库函数

用于比较c样式字符串 或者改为使用,因为您将问题标记为c++:

string password("bobby");
string passinput;
string num;
用于比较c样式字符串 或者改为使用,因为您将问题标记为c++:

string password("bobby");
string passinput;
string num;
仅使用比较C++字符串的相等性,否则只比较两个C样式字符串的地址。

在C++中使用,使用< /P>

std::string password;
std::string passinput;
std::string num;

// if(password.compare(passinput) == 0) also would work
// but as noted in the comments, is overkill for what you
// are doing
if (password == passinput)
{
    cout << "Correct" << endl;
    cin >> num; 
}
else
{
    cout << "Incorrect, try again" << endl;
    goto top;
}
要在当前使用的字符串样式C中执行此操作,请参阅@haccks answer。为了方便起见,我在下面添加了他的答案中描述如何做到这一点的部分

要比较两个C样式字符串,可以在中使用srtcmp标准库函数

// strcmp(passinput, password) returns 0 for
// a successful match.  The ! (negation)
// converts 0 (false in c) to true
if(!strcmp(passinput,password))
{
    cout << "Correct" << endl;
    cin >> num; 
}
仅使用比较C++字符串的相等性,否则只比较两个C样式字符串的地址。

在C++中使用,使用< /P>

std::string password;
std::string passinput;
std::string num;

// if(password.compare(passinput) == 0) also would work
// but as noted in the comments, is overkill for what you
// are doing
if (password == passinput)
{
    cout << "Correct" << endl;
    cin >> num; 
}
else
{
    cout << "Incorrect, try again" << endl;
    goto top;
}
要在当前使用的字符串样式C中执行此操作,请参阅@haccks answer。为了方便起见,我在下面添加了他的答案中描述如何做到这一点的部分

要比较两个C样式字符串,可以在中使用srtcmp标准库函数

// strcmp(passinput, password) returns 0 for
// a successful match.  The ! (negation)
// converts 0 (false in c) to true
if(!strcmp(passinput,password))
{
    cout << "Correct" << endl;
    cin >> num; 
}
尝试:

如果字符串相同,strcmp返回0;如果不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,则返回大于零的值;反之,则返回小于零的值

包括cstring/string.h

尝试:

如果字符串相同,strcmp返回0;如果不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,则返回大于零的值;反之,则返回小于零的值



包括cstring/string.h

goto。不要用它。@marounnaroun:被认为是有害的文章。但是,你很少希望Goto,而且你当然不希望它。这个问题被标记为C++ + C,所以你最好在可能的情况下坚持C++:使用STD::String用于存储,STD::String:GETLIN用于从STDIN读取,一般不去。所以我制作的这个程序应该是一个密码提示。这几乎不是一个技术性的描述,是不是…goto。不要用它。@marounnaroun:被认为是有害的文章。但是,你很少希望Goto,而且你当然不希望它。这个问题被标记为C++ + C,所以你最好在可能的情况下坚持C++:使用STD::String用于存储,STD::String:GETLIN用于从STDIN读取,一般不去。所以我制作的这个程序应该是一个密码提示。这几乎不是一个技术描述,是不是…+1用于推荐std::string。在学习过程中,如何准确地分析字符可能是有用的,但是在C++中,你几乎不可能使用它。虽然这可能是一个明智的建议,但它实际上并没有回答这个问题,这就是为什么代码不推荐1个来推荐STD::String。在学习过程中,如何准确地分析字符可能是有用的,但是在C++中,你几乎不可能使用它。虽然这可能是一个明智的建议,但它实际上并没有回答这个问题,这就是为什么代码不工作,好吧,但是我如何使用SRTCMP呢?我该怎么办?@EricLippert这样的评论最好与.+1搭配使用,因为这是解释为什么比较没有达到预期效果的唯一答案。你可能还应该解释为什么会出现这种情况!需要吗?啊,好吧,但我如何使用srtcmp?我该怎么办?@EricLippert这样的评论最好与.+1搭配使用,因为这是解释为什么比较没有达到预期效果的唯一答案。你可能还应该解释为什么会出现这种情况!is needStd::string对于等于运算符==string::compare有一个有效的重载,如果您不关心哪个字符串“更小”,则该重载就过了头。使用.compare并不错误,但我同意,在这种情况下不需要它。我修改了我的答案以反映这一点。std::string有一个有效的重载,用于equals运算符==string::compare,如果您不关心哪个字符串“更小”,则该重载是多余的。使用.compare并不错误,但我同意,在这种情况下不需要它。我修改了我的答案以反映这一点。