#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 {...}句子?
答案 0 :(得分:7)
C ++中有两种类型的字符串。您对username
和password
使用的种类是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
用于username
和password
然后您将获得您期望的比较
std::string username;
std::string password;
答案 3 :(得分:0)
我认为问题在于比较。要比较字符数组,您需要使用类似strcmp的函数来比较字符数组的内容。如果我没记错的话,我相信你是在比较指针,而不是字符数组的内容,其中一个是引号中的项目(例如“User”或“Qwerty”)。
我建议使用std:string,它旨在使用==(作为运算符)来比较项目,我认为你会发现它更好用,更容易用于字符串信息。