【发布时间】:2014-08-31 01:15:55
【问题描述】:
我正在做一个程序,您可以在其中为商店添加商品。在允许用户这样做之前,有一个子功能会询问用户和密码;如果它们是正确的,则允许用户根据需要添加任何项目,还有一个名为 count 的变量,如果该变量变为“0”,则应该打印和错误以及一些噪音,然后将用户带回主功能和关闭程序。
问题是在条件为 0 后,噪音和错误显示正确,但程序返回询问用户和密码,计数变量从 0 开始,每次尝试都休息 int...-1 -2 -3。
所以我试试这个,即使它的工作我认为这是一个非常糟糕的方式:
来电
while(credencial !=1)
{
credencial=checkout(&counter);
if(counter==88)
{
goto error;
}
}
功能
int checkout(int *counter){
char login[10], password[10];
int c = 0;
printf("\nNumero de intentos restantes: %d\n", *counter);
puts("\nIntroduce un usuario con credenciales: \n");
scanf("%10s", login);
puts("\nIntroduce la contraseña: \n");
scanf("%10s", password);
(*counter)--;
if (*counter == 0)
{
system("cls");
for (c = 0 ;c < 3 ;c++)
{
puts("\n\aACCESSO DENEGADO\n");
}
*counter=88;
}
if (strcmp(strlwr(login), "admin") ==0 && strcmp(strlwr(password),"admin")==0)
{
return 1;
}
}
【问题讨论】:
-
while((cred >= 0) && (++counter <= 88)),也许? -
您的函数并不总是返回值。那很糟;当它不返回值时,你无法判断会发生什么。
-
char password[10]; ... scanf("%10s", password);不好。缓冲区太小。使用:char password[10+1];。login也一样。