2013-10-27 103 views
-6

我在想如何才能用IF,WHILE或FOR編寫下面的代碼(沒有switch/case語句)?將語句切換到IF/

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'的教程都是從如何將多個'if'' else if'摺疊到'switch'開始的,肯定會顛倒過來,這不應該太難。 – 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; (ulData == button_up){if(up == 0){delay_on = delay_on + 100000; ulData = GPIOPinRead(GPIO_PORTE_BASE,(GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)); }' 正如你所看到的,程序需要等到按下按鈕,這是用while循環解決的。任何想法只能使用「if」,「switch-case」或類似的東西來工作嗎?雖然不允許循環,延遲和定時器:\ –

2

基本上用if語句替換第一種情況,用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; (ulData == button_up){if(up == 0){delay_on = delay_on + 100000; 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

這最適合作爲評論... –