首页 > 解决方案 > 如何在每行代码之后检查其主体内的 While 循环“条件”?

问题描述

这是我的代码示例,我可以放置 if 条件来检查 While 条件标志,并在正文的每一行之后放置 break,但这会增加开销。我应该怎么办??????

  while(!((kvp < (Motor_pos+2)) && (kvp > (Motor_pos-2))) ){
               
                if ( (kvp > (Motor_pos+2))){
//                    Relay_75  = LOW;
                    while (kvp > (Motor_pos+2)) {
                        VAR_CW  = HIGH;    // M1 - Red LED
                        VAR_CCW = LOW;    // M2 - Orange LED
                        for(uint8_t i=0; i < 5 ; i++){
                            ADC_s = ADC_s + Read_VAR();
                        }
                        Motor_pos = ADC_sum/5;
                        ADC_sum =0;
//                        UART_Write( Motor_pos);
                        __delay_ms(50);
                    }
                    break;
                }
                else if ((kvp < (Motor_pos-2))){
//                    Relay_100  = LOW;
                    while (kvp < (Motor_pos-2)) {
                        VAR_CW = LOW;   // M1 - Red LED
                        VAR_CCW = HIGH;  // M2 - Orange LED
                        for(uint8_t i=0; i < 5 ; i++){
                            ADC_s = ADC_s + Read_VAR();
                        }
                        Motor_pos = ADC_s/5;
                        ADC_s =0;
//                        UART_Write( Motor_pos);
                        __delay_ms(50);
                    }
                    break;
                }
                else break;
            }
            Motor_pos = 0;
            ADC_s = 0;
            VAR_CW = LOW;   // M1 - Red LED
            VAR_CCW = LOW;  // M2 - Orange LED

标签: cdata-structureswhile-looppic18

解决方案


你的逻辑有几个问题,你的代码的意图是什么并不明显。这是您的逻辑细节的减少:

while (a || b) {
   if (a) {
      while (a) {
          do something a;
      }
      break;
   } else if (b) {
      while (b) {
          do something b;
      }
      break;
   } else {
      break;
   }
}

演变为:

    if (a) {
        while (a) {
           do something a;
        }
    } else if (b) {
        while (b) {
           do something b;
        }
    }

所以你真的需要首先专注于你的简化步骤,然后是另一个。


推荐阅读