2013-10-27 5 views
-6

Мне было интересно, как я могу написать следующий код только с IF, WHILE или FOR (без операторов switch/case)?Оператор switch для IF/while

if(ulDataBuf!=15 && ulData==15) 
{ 
    switch(ulDataBuf){ 
    case 14: 
     timeON+=500000; 
     break; 
    case 13: 
     if(timeON!=0) timeON-=500000; 
     break; 
    case 11: 
     timeOFF+=500000; 
     break; 
    case 7: 
     if(timeOFF!=0) timeOFF-=500000; 
     break; 
    } 
} 
+4

Что произошло, когда вы пытались? –

+0

Практически каждый учебник по 'switch'es начинается с того, как вы можете сбрасывать несколько' if'-'sese if 'в' переключатель', конечно, наоборот, это не должно быть слишком сложно. – Kninnug

+0

@Paul: Я просто не мог заставить его работать правильно: \ –

ответ

2
if(ulDataBuf!=15 && ulData==15) 
{ 
    if(ulDatabuf == 14) 
    { 
     timeON+=500000; 
    } 
    else if(ulDatabuf == 13) 
    { 
     if(timeON!=0) 
     { 
      timeON-=500000; 
     } 
    } 
    else if(ulDatabuf == 11) 
    { 
     timeOFF+=500000; 
    } 
    else if(ulDatabuf == 7) 
    { 
     if(timeOFF!=0) 
     { 
     timeOFF-=500000; 
     } 
    } 

} 
+0

Большое спасибо! Возможно, вы даже знаете, что это код, вот код: 'up = 0; if (ulData == button_up) { if (up == 0) { delay_on = delay_on + 100000; up = 1;} ulData = GPIOPinRead (GPIO_PORTE_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)); } ' Как вы можете видеть, программе необходимо подождать, пока не будет нажата кнопка вверх, которая решается с помощью цикла while. Любые идеи сделать это работают только с «if», «switch-case» или что-то подобное? В то время как петли, задержки и таймеры не допускаются: \ –

2

В основном заменить первый случай на if-statement, а остальные - на инструкцию if-else. Вы будете иметь структуру, как показано ниже:

if (if(ulDataBuf!=15 && ulData==15)) { 
    if (14 == ulDataBuf) { 
     timeON+=500000; 
    } else if (13 == ulDataBuf) { 
     if(timeON!=0) timeON-=500000; 
    } 
} 

И так далее ...

+0

Большое спасибо! Возможно, вы даже знаете, что это код, вот код: 'up = 0; if (ulData == button_up) { if (up == 0) { delay_on = delay_on + 100000; up = 1;} ulData = GPIOPinRead (GPIO_PORTE_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)); } ' Как вы можете видеть, программе необходимо подождать, пока не будет нажата кнопка вверх, которая решается с помощью цикла while. Любые идеи сделать это работают только с «if», «switch-case» или что-то подобное? Пока цикл, задержки и таймеры не разрешены: \ –

+1

Проверьте следующую статью: http://www.cosmiacpubs.org/pubs/uC_Lab5.pdf. Проверьте страницу 6, там вы найдете информацию о прерываниях. Я думаю, это то, что вам нужно. –

0

Приведенные выше ответы ответить на ваш вопрос совершенно - но у меня есть мой собственный вопрос: почему вы хотите это сделать ? Обычно, когда скомпилированные операторы switch сводятся к переходам таблиц в ассемблере, в то время как несколько ветвей if-else могут увеличивать количество сгенерированных инструкций.

+0

Это лучше всего подходит для комментариев ... –

Смежные вопросы