在C中从if else转换为Switch

时间:2016-10-06 21:33:10

标签: c switch-statement

在大家的帮助下,我重新编辑了我的代码。我更新了我的问题:如何使用switch结构增加状态。我将[((button_in& 0x0040)!= 0)]表达式放入switch(expr)中。这给了我我想要的前两个州。 (1)按下按钮1产生0001.(2)按下按钮2产生0010.我不确定如何编程按下按钮1 TWICE以产生0010.我可以使用正确方向的提示或点。我整天都在研究这个问题,我觉得问题与交换机的表达有关。谢谢

int main()
{
char state;
char A;
int button_in = 0; 
DeviceInit();   //set LED1 thru LED4 as digital output
DelayInit();    //Initialize timer for delay

while(1)
{
button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7);
if (button_in != 0)
{
    switch ((button_in & 0x0040) != 0)
    {
    case 0: ((button_in & 0x0040) != 0);  //1. Press button1. State goes to 001.
                 PORTWrite (IOPORT_B, BIT_11);
                 break;

    default: //((button_in & 0x0080) != 0); //2. Press button2. State goes to 010
                 PORTWrite (IOPORT_B, BIT_10);
                 break;
    }

    DelayMs(100);
    PORTClearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13);
    //Add Breakpoint here
}
}
}

4 个答案:

答案 0 :(得分:6)

代码的switch语句格式错误。写得像这样:

int main()
{
    char state;
    int button_in = 0;
    DeviceInit();
    DelayInit();

    button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7);
    if (button_in != 0)
    {
        switch (state)
        {
        case 'A': if ((button_in & 0x0040) != 0)  //1. Press button1. State goes to 001.
                     PORTWrite(IOPORT_B, BIT_10);
                  break;
        case 'B': if ((button_in & 0x0080) != 0) //1aaab. Press button2. State goes to 1000
                    PORTWrite (IOPORT_B, BIT_13);
                  break;
        }

        DelayMs(100);
        PORTCLearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13);
        //Add Breakpoint here
    }
}

答案 1 :(得分:2)

首先,您实际上并未将任何值分配给"州",因此测试它并不能给您带来任何有意义的结果。

其次,你是否会跳进"如果"块。做这种事情是有正当理由的(参见Duff的设备),但通常这是一个错误。你的意思是"案例"进入"如果"而不是相反?

答案 2 :(得分:1)

完全绕过以下几行:

button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7); 
if (button_in != 0) {                               

switch语句立即分支到第一个匹配的大小写;跳过第一个匹配案例标签之前的任何代码。

您需要在PORTReadBits声明之外移动switch来电。

答案 3 :(得分:-1)

if / case并不在一起。

switchcase一致,ifelse一致。

阅读该语言的基础知识。