箐11 2024-03-03 21:02 采纳率: 40%
浏览 7
已结题

为什么当我的密码输入错误第二次的时候 error_counts没有按照预想的变为2

想知道为什么当我的密码输入错误第二次的时候 error_counts没有按照预想的变为2,error_counts是在main.c最前面定义的,code_1,code_2,code_3一开始初始化是-1,当按下对应的键的时候会进行加一。当密码输入错误时重新开始


/*******************************************************************************
* 函数名  : Key_Function
* 功能    : 针对于按下的键来实现对应的功能
* 输入    : 无
* 返回值  : 无
*******************************************************************************/

void Key_Function()
{
    //按下B1键(第一个按键)第一位密码+1,每位密码的范围是0-9
    if(keys[0].key_flag)
        {
            keys[0].key_flag=0;
            if(menu==0)
            {
            //修改密码第一位
            code_1++;
            if(code_1==10)
                code_1=0;
            }
        }
    //按下B2键(第二个按键)第二位密码+1,每位密码的范围是0-9
    if(keys[1].key_flag)
        {
            keys[1].key_flag=0;
            
            if(menu==0)
            {
            //修改密码第二位
            code_2++;
            if(code_2==10)
                code_2=0;
            }
        }
    //按下B3键(第三个按键)第三位密码+1,每位密码的范围是0-9
    if(keys[2].key_flag)
        {
            keys[2].key_flag=0;
            if(menu==0)
            {
            //修改密码第三位
            code_3++;
            if(code_3==10)
                code_3=0;
            }
        }
    //按下B4键(第四个按键)则确认输入的密码,进行下一步的判断
    if(keys[3].key_flag)
        {
            keys[3].key_flag=0;
            
            //判断密码是否输入正确

            if(origin_code/100==code_1 && (origin_code%100)/10==code_2 && origin_code%10==code_3 )
            {
                //显示输出状态界面
                menu=1;
                code_correct=1;
                error_counts=0;
                Open_Led(1);
            }
            else
            {
                //显示密码输入界面
                code_1=code_2=code_3=-1;
                
                //记录密码连续输入错误次数
                error_counts++;
                code_correct=-1;
                char str[30];
    
    
                sprintf(str,"error_counts=%d     ",error_counts);
                LCD_DisplayStringLine(Line7, (u8 *)str);
                //密码连续输入错误次数达到三次时LED2发生变化
                if(error_counts==3)
                    {
                        LCD_DisplayStringLine(Line8, (u8 *)"hello");
                        Open_Led(2);
                    }
            }
        }
}


  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-03 21:03
    关注

    箐11 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    从你提供的代码中,我们可以看到error_counts的初始化值是在出错时加一的。根据你的描述,当你输入错误密码第二次时,error_counts没有按照预期的加1。以下是一些可能的原因和解决方案:

    1. error_counts的作用域:请确保error_counts的作用域适当。如果它的作用域太窄,可能会导致第二次错误时无法保留上一次的值。你可以将error_counts的定义放在Key_Function()函数的外部,或者作为全局变量。

      int error_counts = 0; // 在main.c之外的范围定义
      
    2. 其他地方重置了error_counts:请检查代码中是否有其他地方对error_counts进行了重置,这可能导致第二次错误时无法正确累加。确保只有在密码输入错误的情况下才将error_counts加1。

    3. 密码输入错误的条件不满足:你对密码的判断条件是密码输入是否和初始密码相匹配,确保判断条件中使用了正确的变量名和比较运算符。

      if (origin_code / 100 == code_1 && (origin_code % 100) / 10 == code_2 && origin_code % 10 == code_3) {
          // 密码正确的处理逻辑
      } else {
          // 密码错误的处理逻辑,包括增加错误计数
          error_counts++;
          // ...
      }
      

    如果以上解决方案无法解决问题,请提供完整的代码和更多细节,以便我们更好地帮助你。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月12日
  • 创建了问题 3月3日