我正在创建用户名和密码。在此之前,当我输入 backspace 时,backspace 不是删除密码,而是输入一些东西,我想出了使用 ASCII,但我不知道脚本删除密码。
int a=0, i=0;
char uname[10], c=' ';
char pword[10], code[10];
char user[10]="user";
char pass[10]="pass";
a:
system("cls");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t| STUDENT REPORTING SCORE SYSTEM |");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t=========== LOGIN FIRST ============");
printf("\n\n\n\t\t\t\tENTER USERNAME : ");
scanf("%s", &uname);
printf("\n\n\t\t\t\tENTER PASSWORD : ");
while(i<10)
{
pword[i]=getch();
c=pword[i];
if(c==13) break;
else if(c==8)
//here is the blank
else printf("*");
i++;
}
pword[i]='\0';
i=0;
if(strcmp(uname,"user")==0 && strcmp(pword,"pass")==0)
{
printf("\n\n\n\t\t\tWELCOME TO STUDENT REPORTING SCORE SYSTEM\n\t\t\t\t LOGIN IS SUCCESSFUL");
printf("\n\n\n\t\t\t Press any key to continue...");
getch();
}
else
{
printf("\n\n\n\t\t\t SORRY !!!! LOGIN IS UNSUCESSFUL");
getch();
goto a;
}
我不知道我应该在那个中写什么//这里是空白
。所以当我使用a-=2
时,它不想删除*
,也不输入任何内容。
我稍微修改了你的代码。
在我的系统上,一个 getch()
被删除了,所以我使用 _getch()
代替它。在 printf 之后,我在下一个 _getch()
处得到了一个 '\0'
字符。所以我必须用 if (c == '\0') continue;
行忽略它。
要删除 '*'
字符,您必须打印 "\b\b"
(\b
后退一个字符。' '
覆盖 '*'
和 '\b'
再次返回)。
如果用户键入 10 个字符作为密码,您的代码中就会出现缓冲区溢出。您必须为最后一个 '\n'
字符分配 10 + 1
长度数组。
我认为您应该使用 std::string
而不是 char*
并从代码中删除未使用的变量。
希望对你有帮助。
bool login(std::string& username, std::string& password)
{
username = "";
password = "";
char c = ' ';
system("cls");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t| STUDENT REPORTING SCORE SYSTEM |");
printf("\n\n\t\t\t======================================");
printf("\n\n\t\t\t=========== LOGIN FIRST ============");
printf("\n\n\n\t\t\t\tENTER USERNAME : ");
std::cin >> username;
printf("\n\n\t\t\t\tENTER PASSWORD : ");
while (true)
{
c = _getch();
if (c == '\r') break;
if (c == '\0') continue;
if (c == '\b')
{
if (password.length() > 0)
{
password.pop_back();
printf("\b \b");
}
}
else
{
printf("*");
password.push_back(c);
}
}
_getch(); // Read the extra '\0'
if (username == "user" && password == "pass")
{
printf("\n\n\n\t\t\tWELCOME TO STUDENT REPORTING SCORE SYSTEM\n\t\t\t\t LOGIN IS SUCCESSFUL");
return true;
}
else
{
printf("\n\n\n\t\t\t SORRY !!!! LOGIN IS UNSUCESSFUL");
return false;
}
}
int main()
{
while (true)
{
std::string username = "";
std::string password = "";
auto successLogin = login(username, password);
if (successLogin)
break;
_getch(); // Press any key to continue...
}
return 0;
}
我是一名优秀的程序员,十分优秀!