C++ 如何修复密码输入,它一次输入两个字符
我正在设置一个注册和登录程序,但它从不允许登录。 在执行时,它显示输入两个字符,而用户只输入一个字符,并且在登录时密码从不匹配。 任何关于goto的解决方案C++ 如何修复密码输入,它一次输入两个字符,c++,C++,我正在设置一个注册和登录程序,但它从不允许登录。 在执行时,它显示输入两个字符,而用户只输入一个字符,并且在登录时密码从不匹配。 任何关于goto的解决方案 #include<iostream> #include<conio.h> #include<string.h> using namespace std; int i, t = 3; struct dateob { int day; int month; int year; }; struct userde
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int i, t = 3;
struct dateob {
int day;
int month;
int year;
};
struct userdetails {
char name[50];
dateob dob;
char country[100];
char residential_address[100];
char office_address[100];
char citizen_proof[100];
long phoneno;
char gender[10];
long money;
char username[100];
char password[100];
};
userdetails ud[3];
char u[100], u1[100];
void Entering(char a, int n)
{
if (a == 'S')
{
cout << "Username ";
cin.ignore();
cin.getline(ud[n].username, 100);
string user = ud[n].username;
cout << "Password ";
for (i = 0; i < 100; i++)
{
ud[n].password[i] = _getch();
if (ud[n].password[i] == 13)
break;
cout << "*";
}
cout << "\n"
<< "User Created\n";
goto login;
}
else if (a == 'L')
{
login:
char username[100], password[100];
cout << "Welcome To Login";
for (int j = 0; j <= 3; j++)
{
cout << "Username ";
cin.ignore();
cin.getline(username, 100);
cout << "Password ";
for (i = 0; i < 100; i++)
{
password[i] = _getch();
if (password[i] == 13)
break;
cout << "*";
}
if (strcmp(username, ud[n].username) == 0 && strcmp(password, ud[n].password) == 0)
{
cout << "You can Enter :)";
break;
}
else
{
cout << "\nSomething went wrong! \n";
cout << "You Left with" << t-- << "Try \n";
}
}
if (t == 0)
cout << "You are Suspicious";
}
}
int main()
{
char a, b, c;
int d;
for (int n = 0; n < 3; n++)
{
cout << "Do you want to enter users :Y/N ";
cin >> b;
if (b == 'Y')
{
cout << "Sign Up : S \n"
<< "Login : L \n";
cin >> a;
Entering(a, n);
}
else
break;
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int i,t=3;
结构数据对象{
国际日;
整月;
国际年;
};
结构用户详细信息{
字符名[50];
dateob-dob;
查尔国家[100];
char住宅地址[100];
字符办公室地址[100];
char citizen_证明[100];
长音素;
性别[10];
长钱;
字符用户名[100];
字符密码[100];
};
用户详细信息[3];
字符u[100],u1[100];
无效输入(字符a,整数n)
{
如果(a='S')
{
欢迎来到SO,先生
这段代码有几个地方不对劲,如果可以的话,我想帮你提一些建议。注释中已经有很多这样的东西了
首先,不要使用有很多问题的goto
,而是使用循环:
bool loginSuccessful = false;
while (!loginSuccessful) {
// Do the login stuff here
}
第二,电话号码实际上应该是一个字符串(看起来你可能想在顶部的结构中使用char[15]
或其他什么)。double
类型可能是易变的和混乱的,应该只用于数学之类的
第三,为了回答您的问题,大多数操作系统中的大多数终端在输入标准in(cin
)时都会向控制台回显字符。不同的操作系统允许您以不同的方式关闭此功能。引用:
在Windows中,可以使用SetConsoleMode()关闭任何标准输入函数的echo
#包括
#包括
#包括
使用名称空间std;
int main()
{
句柄hStdin=GetStdHandle(标准输入句柄);
DWORD模式=0;
GetConsoleMode(hStdin和模式);
设置控制台模式(hStdin,模式和(~启用回波输入));
字符串s;
getline(cin,s),;
cout>
cin上的操作员,或者更好的是,查看和中的人员是如何获得输入的
希望这有帮助。粘贴代码后,突出显示所有代码,然后按
{}
按钮,在每行前面加上4个空格(代码块)请发布一个。这意味着代码只足以产生你所得到的错误。转到登录;
--请不要这样做。双电话号码;
会很有趣……关于生成一个你需要最小、完整和可验证的密码的一个重要注意事项。以前这个问题缺乏最小值(从技术上讲仍然如此),但现在它也缺少完整的和可验证的。我们无法编译并运行给定的代码(完整的)来查看错误(可验证的)。这意味着我们给出的任何答案都可能不正确,因为我们无法测试它们。也就是说,我们想要MCVE的真正原因是MCVE是一种强大的调试技术。应用它通常会向您揭示错误的原因,并消除问问题的需要。
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main()
{
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdin, &mode);
SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));
string s;
getline(cin, s);
cout << s << endl;
return 0;
}//main
#include <iostream>
#include <string>
#include <termios.h>
#include <unistd.h>
using namespace std;
int main()
{
termios oldt;
tcgetattr(STDIN_FILENO, &oldt);
termios newt = oldt;
newt.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
string s;
getline(cin, s);
cout << s << endl;
return 0;
}//main