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