密码程序来掩盖字符 - 怎么了?
password program to mask characters-What's Wrong?
我已经编写了一个程序,将密码显示为(*),就像我们通常看到的那样,但我不知道它出了什么问题,因为它在输入3个字符后就停止了。。。。请帮忙。。
#include <iostream>
#include<string.h>
#include<conio.h>
using namespace std;
int main(){
char* pass=new char[20];
int i=0;
cout<<"nn Pass : ";
while(pass[i]!=' ')
{
pass[i]=getch();
i++;
cout<<"*";
}
cout<<"nn";
if(strcmp(pass,"Vivek")==0)
{
cout<<"Access Granted! "<<endl;
}
else
{
cout<<"Access Denied!";
}
return 0;
}
所做的更改已在摘要部分中进行了描述。。
//New code based on the discussions below
#include <iostream>
#include<string.h>
#include<conio.h>
using namespace std;
int main()
{
char pass[20];
int i=0;
cout<<"nn Pass : ";
do
{
pass[i]=getch();
i++;
cout<<"*";
}while(pass[i-1]!=' ');
cout<<"nn";
if(strcmp(pass,"Vivek")==0)
{
cout<<"Access Granted! "<<endl;
}
else
{
cout<<"Access Denied!";
}
return 0;
}
在循环中,在将任何值放入插槽之前,您正在检查插槽中的'\0'。
while(pass[i]!=' ')
{
pass[i]=getch();
i++;
cout<<"*";
}
在第一次进入循环之前,i
的值为零。翻译过来就是:
while (pass[0] != ' ')
根据您的初始化,您尚未初始化pass[0]
或pass
阵列中的任何插槽。
值可能为零,也可能是2016年。在使用变量(包括数组)之前,您应该始终初始化它们。
您需要重新思考循环将如何终止。例如,当用户按Enter键时,getch()
返回的值是多少?是"\0"吗?
此外,为了防止缓冲区溢出(例如,用户输入30个字符),您应该使用C++std::string
类型。如果您坚持使用C风格的字符数组,那么您的输入循环应该检查缓冲区溢出。
您还应该处理退格的情况(不要忘记缓冲区下溢检查)。
相关文章:
- 不断收到相同的错误...怎么了?C++
- 在这种情况下,我真的复制了字节还是复制了字符?
- 编译器没有显示错误,但我没有得到任何输出.怎么了?
- qsort 不适用于我的 impl 中的浮点类型。怎么了?
- 在C++中表现不佳.怎么了?
- 我的程序怎么了?(C )
- 这里怎么了?单位转换器
- 错误:未定义对 .. 的引用.怎么了
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 我在C++文件中的简单代码块上有 2 个错误。错误 C2059:语法错误:"?"。第二智能感知:预期表达式。怎么了?
- 我的代码怎么了?带有QT的原始输入API
- 使用 cin.get() 似乎没有读取我期望的字符。怎么了?
- 当其中一个字符串来自cin时,无法比较两个字符串.这里怎么了
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- "5"怎么了?纸上一切都很好
- 我的cout怎么了
- Rapidxml写错了字符
- C++:腹肌怎么了
- Qt OpenGL with Widgets:怎么了?
- 密码程序来掩盖字符 - 怎么了?