2013-10-27 76 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

这最适合作为评论... –