Pus*_*kar 0 c++ string raw-input
下面是我用C++设计的应用程序的一部分.下面的代码片段显示***作为用户输入的密码.代码在程序中的两个地方使用,一个正常,另一个在结尾处显示未知字符enterdPassword.
它在这里工作正常.输入的密码保存在文件中以供进一步使用.
if(FirstRun()){
display_welcome_text_first_run();
cout<<"\nEnter A Password(Max 13 character): ";
for(i=0; i<13; i++){
x = getch();
if(x == '\r'){ break; }
putchar('*');
p[i]=x;
}
p[i+1]='\0';
string pwd(p);
ofstream o(PASSWORD_FILE,ios::binary);
o <<pwd<<endl;
o.close();
Run Code Online (Sandbox Code Playgroud)
这里显示了它在结尾处显示未知字符的错误enterdPassword.
bool verifyPassword(){
string savdPassword;
char px[20], x;
int i;
cout<<"Enter Your Password To Continue: ";
for(i=0; i<13; i++){
x = getch();
if(x == '\r'){ break; }
putchar('*');
px[i] = x;
}
px[i+1] = '\0';
string enterdPassword(px);
ifstream pp(PASSWORD_FILE, ios::binary);
pp>>savdPassword;
pp.close();
cout<<endl<<enterdPassword;<<" "<<savdPassword; //for debugging
if(enterdPassword == savdPassword){
return true;
}
else{return false;}
}
Run Code Online (Sandbox Code Playgroud)
程序运行的图像.

我不明白为什么相同的代码(只有不同的变量)给出不同的工作如何根据需要纠正代码才能正常工作?
你必须改变
p[i+1]='\0';
Run Code Online (Sandbox Code Playgroud)
至
p[i]='\0';
Run Code Online (Sandbox Code Playgroud)
因为i在最后一次循环迭代后已经增加了.
但是,最好不要使用原始字符数组:
string pwd;
for(i=0; i<13; i++){
x = getch();
if(x == '\r'){ break; }
pwd += x;
}
Run Code Online (Sandbox Code Playgroud)