【问题标题】:Unable to stop the function when the condition its true当条件为真时无法停止函数
【发布时间】: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 &gt;= 0) &amp;&amp; (++counter &lt;= 88)),也许?
  • 您的函数并不总是返回值。那很糟;当它不返回值时,你无法判断会发生什么。
  • char password[10]; ... scanf("%10s", password); 不好。缓冲区太小。使用:char password[10+1];login 也一样。

标签: c function goto


【解决方案1】:

您可以使用break; 离开while 循环(然后您需要在循环之后确定是正常退出还是错误退出,例如通过检查credential 值)或添加额外的暂时的条件,比如

while(credentiel != -1 && !abort) {
....
if (*counter == 88)
  abort = true;

或者 cou 可以使用 goto,这还不错。特别是如果错误标签也被其他地方使用。

顺便说一句:我不知道您为什么将变量与返回类型混为一谈,以及为什么使用 88 作为特殊数字。这一切都很不典型。您可以将计数器保持在外循环中并使凭证检查无状态,让它仅返回通过/失败。对于特殊“信号”,更常见的是使用负值 (-1)。在所有情况下,请确保没有人可以使用其他技巧来强制使用特殊值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多