在c++中为控制台应用程序创建密码



我正在尝试制作一个简单的程序,作为我所学内容的应用程序,我正在尝试创建一个从用户那里获取密码的程序,对于用户输入的每个字符,控制台中都会显示一个"*",当他按下回车键时,程序停止获取更多字符,并再次显示密码,所以我使用字符串来存储每个字符

这是我的代码:。。。

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

int main(){
int i=0;
string password;
char p;
cout << "Password: ";
do{
p = getch();
cout.put('*');
password[i] = p;
++i;
} while (p != 'n');
cout << "Your password is : " << password;
return 0;
}

当我运行该程序时,它仍然使用字符,并且从未停止

当我退出控制台窗口时,它也会显示这样的消息:

那么解决方案是什么呢?!

提前感谢:(

  • 按Enter键时,将通过getch()读取'r'(CR(,而不是'n'(LF(
  • 您正在访问字符串的元素,而没有分配它们

试试这个:

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

int main(){
string password;
char p;
cout << "Password: ";
do{
p = getch();
cout.put('*');
password.push_back(p); // note: 'r' will also be appended
} while (p != 'r');
cout << "Your password is : " << password;
return 0;
}

为了避免复制粘贴上面的代码,如果@MikeCat代码不起作用,请使用Windows使用它来表示按下了回车键,而Linux和Unix使用它表示按下了enter键,您还可以通过它们的ASCII码值(十进制或十六进制(来检查它们,该值为10表示\r\n,13表示\r\n,0x0D0A表示\r\n。

所以你可以通过检查-如果你在窗口,我想-

while (p != 'rn'); 

或者使用ASCII码试试

while (p != 10); // n

while (p != 13); // r

while (p != 0x0D0A); // rn

最新更新