C++ char或逻辑运算符?如果正确,为什么要使用其他{...}?

Arv*_*ios 1 c++

        #include <iostream>

                int main()
                {
                    char username[15];
                    char password[15];


                    std::cout << "Hello, please login to continue your action.<Max 15 Char>" << std::endl;
                    std::cout << "Username: ";
                    std::cin >> username;
                    std::cout << "Password: ";
                    std::cin >> password;

                    if (username == "User" && password == "qwerty")
                    {
                        std::cout << "Hello, creator.";
                    }
                    else 
                    {
                        std::cout << "Invalid Login";
                    }
/*23 row*/          std::cout << std::endl << std::endl << "Username=" <<username << std::endl << "Password=" << password;

                    std::cout << std::endl << std::endl << "Press Enter to close the window . . . ";
                    std::cin.clear();
                    std::cin.sync();
                    std::cin.get();
                }
Run Code Online (Sandbox Code Playgroud)

当我输入正确时,它应该说Hello Creator但它只会变为无效我认为也许char商店只有1个字符,这就是为什么在23行我接受查看存储在char用户名和密码中但是一切都很好.为什么然后需要Else {...}句子?

Som*_*ude 7

C++中有两种类型的字符串.您正在使用的那种username并且password旧式C字符串.它们基本上是内存中的一系列字符,由特殊字符终止'\0'.由于它们来自旧的C,因此不能使用比较或赋值运算符之类的东西.

要比较两个旧式C字符串,您必须使用以下strcmp功能:

if (strcmp(username, "user") == 0)
{
    // username == "user"
}
Run Code Online (Sandbox Code Playgroud)

更好的解决方案是使用新的C++字符串类:std::string相反,因为它内置了更多的功能.例如处理比较.

  • 像往常一样,"新C++字符串类"实际上意味着"超过10年的C++字符串类". (6认同)