将if语句转换为switch语句

时间:2016-04-07 22:30:57

标签: c switch-statement

我的目标是使用switch语句简化我的功能,但我无法弄清楚如何在switch语句中包含一段代码。如果我添加了printf("(");infixTree(node->left);,那么如果我在每种情况下都添加了这些代码行,那么它们会在意外时间被调用吗?

这是我目前的职能。

void infixTree(ExpNode* node)
{   
    if(node->type==INTEGER)
    {
        printf("%d",node->value.value.iVal);
        return;
    }

    if(node->type==DOUBLE)
    {
        printf("%f",node->value.value.dVal);
        return;
    }

    if(node->type==SYMBOL)
    {
        printf("%s",node->symbol);
        return;
    }

    printf("(");
    infixTree(node->left);

    if(node->type==ADD_OP)
    {
        printf(" + ");
    }
    else if(node->type==SUB_OP)
    {
        printf(" - ");
    }
    else if(node->type==MUL_OP)
    {
        printf(" * ");
    }
    else if(node->type==DIV_OP)
    {
        printf(" / ");
    }
    else if(node->type==MOD_OP)
    {
        printf(" %% ");
    }
    else if(node->type==ASSIGN_OP)
    {
        printf(" = ");
    }

    infixTree(node->right);
    printf(")");
}

我不知道如何包含

printf("(");
infixTree(node->left);

我目前使用switch语句的功能如下所示。

void infixTree(ExpNode* node)
{
    switch(node->type) 
    {
        case INTEGER :
            printf("%d", node->value.value.iVal);
            return; 
        case DOUBLE :
            printf("%f", node->value.value.dVal);
            return;
        case SYMBOL :
            printf*%s", node->symbol);
            return;
    }

    switch(node->type)
    {
        case ADD_OP:
            printf("(");
            infixTree(node->left);
            printf(" + ");
            break;
        case SUB_OP:
            printf("(");
            infixTree(node->left);
            printf(" - ");
            break;
        case MUL_OP :
            printf("(");
            infixTree(node->left);
            printf(" * ");
            break;
        case DIV_OP :
            printf("(");
            infixTree(node->left);
            printf(" / ");
            break;
        case MOD_OP :
            printf("(");
            infixTree(node->left);
            printf(" %% ");
            break;
        case ASSIGN_OP :
            printf("(");
            infixTree(node->left);
            printf(" = ");
            break;
    }

    infixTree(node->right);
    printf(")");
}

0 个答案:

没有答案