C++ 密码保护错误,我需要帮助:D
Posted
技术标签:
【中文标题】C++ 密码保护错误,我需要帮助:D【英文标题】:C++ Password protection error and i need help :D 【发布时间】:2014-06-19 18:43:32 【问题描述】:我想知道是否有任何代码可以使您输入的内容(例如,Hello
变为 *****
)变得不可读。
我有这个代码
string pass;
当您输入“cin”时,我不希望任何人能够阅读它。
cin >> pass;
cout << pass;
【问题讨论】:
不在标准 C++ 的范围内。也许你的操作系统提供了一个直接控制文本 I/O 的库。 创建一个计算字符数量的函数,为每个字符添加一个 * 并返回密码编码文本 你可以查看这些***.com/questions/13694170/…***.com/questions/1413445/read-a-password-from-stdcin @Rynoh97 我真的不知道该怎么做:/ 完全隐藏输入可能就足够了? 【参考方案1】:这里我们用星号屏蔽输入。我们使用tcgetattr
/tcsetattr
来获取和设置终端属性,因此在标准输入上禁用回显,我们在每个字符用户输入上打印"*"
。
#include <iostream>
#include <string>
#include <termios.h>
#include <stdio.h>
int getch()
struct termios oldtc, newtc;
int ch;
tcgetattr(STDIN_FILENO, &oldtc);
newtc = oldtc;
newtc.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newtc);
ch=getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldtc);
return ch;
int main(int argc, char **argv)
int ch;
printf("Press ENTER to exit.\n\n");
for (;;)
ch = getch();
if(ch == '\n')
break;
printf("*");
return 0;
【讨论】:
【参考方案2】:下面的代码在 Visual Studio 2012(也是 VC6.0)上经过测试和运行。访问http://msdn.microsoft.com/en-us/library/aa297934%28v=vs.60%29.aspx了解更多关于函数_getch()的信息。
_getch():从控制台获取不带回显(_getch)或带回显(_getche)的字符。
#include <iostream>
#include <string>
#include <conio.h>
int main()
std::string pass;
for(int c; c = _getch(); )
if(c=='\r' || c=='\n' || c==EOF)
break;
else
pass += c;
std::cout << '*';
std::cout << "\nYour password is: " << pass << std::endl;
return 0;
【讨论】:
以上是关于C++ 密码保护错误,我需要帮助:D的主要内容,如果未能解决你的问题,请参考以下文章
Navicat 8 for MySQL怎么总是连接不了,是否需要用户名和密码.求各位大大帮助