Моя цель - упростить мою функцию с помощью операторов switch, но я не могу понять, как включить часть кода в операторы switch. Если я добавлю в printf("(");
и infixTree(node->left);
, они не будут вызваны в неожиданные моменты, если я добавлю эти строки кода под каждый случай?Преобразование операторов if в оператор switch
Вот моя текущая функция.
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);
Мои функции, используя операторы переключатель выглядит как это на данный момент.
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(")");
}
Да, это была ошибка. Он должен был быть там. Отредактировано – FatFockFrank
У вас могут быть два разных «переключателя», например, у вас есть две разные лестницы elsif. –
Хорошо, я отредактировал его, Будет ли это решение работать? – FatFockFrank