Почему CodeVision AVR игнорирует некоторые операторы в операторе «если»?

0

Теперь это работает так, как должно. Ну, честно говоря, это была моя ошибка, но без некоторых из ваших вопросов было бы трудно избавиться от нее.

   if ((key==11)^(key==13)^(key==16)^(key==17))   //this is the only 
                              // dirty hack style string needed to fix this
        {  
            switch (key)
                { 
                     case 11: { mode=0x01; break; }  //plus
                     case 13: { mode=0x02; break; }  //minus 
                     case 16: { mode=0x03; break; } //multiply
                     case 17: { mode=0x04; break; } //divide
                }  

            if (mode)
                {  
                      buffer=atof(display);  
                      firstop=1;  
                      first=1;   
                      redraw=1; 
                                      //and to delete the goto
                }   
        }
  • 0
    Код не полный. пожалуйста, покажите нам определения переменных.
  • 0
    Кстати: использование goto считается плохой практикой. Почему бы просто не поместить //some other code here в ветку else? Также ваш отступ ужасен.
Показать ещё 7 комментариев
Теги:
if-statement
switch-statement
avr

1 ответ

0

Вы никогда не перезагружаете режим, поэтому однократное нажатие будет продолжать делать выбранный режим для любого другого ключа.

Вы не определяете инструкцию по умолчанию в операторе switch

Попробуйте сыграть с переключателями оптимизации компилятора. Если он решает вашу проблему, то это, вероятно, volatile проблема, когда режим оптимизируется

  • 0
    Хорошо, я никогда не сбрасываю режим. Но это проверяется, только если я нажимаю равную кнопку, поэтому я могу изменить режим, нажав другую кнопку управления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню