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

时间:2012-03-11 19:04:12

标签: 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();
                }

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

4 个答案:

答案 0 :(得分:7)

C ++中有两种类型的字符串。您对usernamepassword使用的种类是old-style C strings。它们基本上是内存中的一系列字符,由特殊字符'\0'终止。由于它们来自旧的C,因此不能使用比较或赋值运算符之类的东西。

要比较两个旧式C字符串,您必须使用strcmp函数:

if (strcmp(username, "user") == 0)
{
    // username == "user"
}

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

答案 1 :(得分:1)

在c中编码时,strcmp没问题。强烈建议您在C ++中使用string。

#include <iostream>

int main()
{
  std::string username;                
  std::string password;                                                                                                                                                               
  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";
     }
  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();
}

答案 2 :(得分:0)

您正在尝试将char[]char*进行比较。这是一个指针比较,而不是字符串比较,因此你得到一个假,因为它们是一个不同的指针地址。将std::string用于usernamepassword然后您将获得您期望的比较

std::string username;
std::string password;

答案 3 :(得分:0)

我认为问题在于比较。要比较字符数组,您需要使用类似strcmp的函数来比较字符数组的内容。如果我没记错的话,我相信你是在比较指针,而不是字符数组的内容,其中一个是引号中的项目(例如“User”或“Qwerty”)。

我建议使用std:string,它旨在使用==(作为运算符)来比较项目,我认为你会发现它更好用,更容易用于字符串信息。