C++ c++;,根据最新的二维阵列数据检查用户输入
我正在为我们的最终项目制作一个程序,该程序包含登录/注册 我已经制作了一个struct数据包含一个2D数组,该数组包含100行(该数组可以包含的最大学生数)和2列(一列表示矩阵数,一列表示密码) 在登录函数中,我已经完成了以下操作,但即使我的登录数据是正确的,它也总是转到else条件C++ c++;,根据最新的二维阵列数据检查用户输入,c++,c++17,C++,C++17,我正在为我们的最终项目制作一个程序,该程序包含登录/注册 我已经制作了一个struct数据包含一个2D数组,该数组包含100行(该数组可以包含的最大学生数)和2列(一列表示矩阵数,一列表示密码) 在登录函数中,我已经完成了以下操作,但即使我的登录数据是正确的,它也总是转到else条件 void login() { string CheckMatric, CheckPassword; system("CLS"); cout << endl;
void login() {
string CheckMatric, CheckPassword;
system("CLS");
cout << endl;
cout << "Enter Matric number: " << endl;
cin >> CheckMatric;
cout << "Enter Password: " << endl;
cin >> CheckPassword;
for (int i = 0; i < sizeof(sData.AccessData); i++) {
for (int j = 0; j < sizeof(sData.AccessData[i]); j++) {
if (CheckMatric == sData.AccessData[i][j])
if(CheckPassword == sData.AccessData[i][j]) {
cout << "Successfully logged in" << endl;
exit(0);
}
else {
int choice;
cout << "oops, wrong username or password, try again or call +60...... for support" << endl;
cout << endl;
cout << "Enter 1 to try again OR Enter 2 to sign up " << endl;
cout << endl;
cin >> choice;
if (choice == 1)
login();
else if (choice == 2)
signup();
else if (choice == 0)
exit(0);
else {
cout << "Opps, you will start from the begining :( " << endl;
first_interface();
}
}
}
}
}
void登录(){
字符串CheckMatric,CheckPassword;
系统(“CLS”);
cout假设CheckMatric和CheckPassword都必须等于sData.AccessData[i][j],这意味着密码必须与用户名相同,这可能不是您想要的。您应该完全摆脱j for循环。并将用户名与行的第一个元素进行比较,将密码与行的第二个元素进行比较
size_t n = sizeof(sData.AccessData)/sizeof(sData.AccessData[0]);
for (int i = 0; i < n; i++) {
if (CheckMatric == sData.AccessData[i][0] &&
CheckPassword == sData.AccessData[i][1]) {
cout << "Successfully logged in" << endl;
exit(0);
}
// login failed... prompt user here
size\u t n=sizeof(sData.AccessData)/sizeof(sData.AccessData[0]);
对于(int i=0;i 提示:因为您使用的是sData.AccessData[i][j]
在两种比较中,矩阵编号和密码必须相同。此外,使用sizeof
是不正确的。sizeof
返回对象的字节大小,而不是数组中的元素数。提示:使用std::vector
而不是固定长度的C样式数组。100
这里是一个assu这意味着你每次都要为最坏的情况分配资源。如果可以避免的话,不要设定最大值。这个答案是针对你的具体问题,实现登录数据库的更好方法是使用,其中检查成功登录的过程将非常简单(AccessData[user]==password){…}没有循环。通常,在尝试自己实现之前,最好先检查问题的现有结构。
void signup() {
system("CLS");
string NewMatricNo, NewPassword;
cout << "Enter Your Matric Number: " << endl;
cin >> NewMatricNo;
cout << "Enter Password : " << endl;
cin >> NewPassword;
for (int i = 0; i < sizeof(sData.AccessData); i++) {
for (int j = 0; j < sizeof(sData.AccessData); j++) {
NewMatricNo = sData.AccessData[i][j];
NewPassword = sData.AccessData[i][j];
}
}
cout << "Successfully signed up! " << endl;
}
size_t n = sizeof(sData.AccessData)/sizeof(sData.AccessData[0]);
for (int i = 0; i < n; i++) {
if (CheckMatric == sData.AccessData[i][0] &&
CheckPassword == sData.AccessData[i][1]) {
cout << "Successfully logged in" << endl;
exit(0);
}
// login failed... prompt user here