gpt4 book ai didi

没有声明和中断的情况

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:20 26 4
gpt4 key购买 nike

我正在处理 RPN 计算器,我发现了一些使用 switch 的方法,其中一些 case 没有任何表达式和 中断语句:

这是我使用此算法的方法,不幸的是它无法正常工作作为函数的输入,我使用 struct 的数组定义如下:

num OPERATORS {val, PLUS, MINUS, MULTI, DIV, SIN, COS, O_PAREN, C_PAREN, END};
typedef struct value {

double number;
enum OPERATORS oper;
};

这是 RPN 解析器:

void get_the_rpn(struct value values[], struct value rpn_values[], int length) {

struct value stack[256]; //stack for keeping the values
int i; //iterator
int pos; //postion on stack

i=pos=0;
//go trough each element in values and reprase it to the rpn format
while(values[i].oper != END) {

//check first if current element isn't number
if(values[i].oper == val) {
rpn_values[i] = values[i];
pos++;
}
//current element isn't number is an operator
else
switch(values[i].oper)
{
case PLUS:
;
case DIV:
while (pos && stack[pos-1].oper != O_PAREN &&
stack[pos-1].oper != PLUS &&
stack[pos-1].oper != MINUS) {
rpn_values[i] = stack[--pos];
}
stack[pos++] = values[i];
break;
case MINUS:
while (pos && stack[pos-1].oper != O_PAREN) {
rpn_values[i] = stack[--pos];
}
stack[pos++] = values[i];
break;
case MULTI:
;
case O_PAREN:
stack[pos++] = values[i];
break;
case C_PAREN:
while (stack[pos-1].oper != O_PAREN) {
rpn_values[i] = stack[--pos];
}
pos--;
break;
case SIN:
rpn_values[i] = values[i];
break; //edited
case COS:
rpn_values[i] = values[i];
break; //edited
}
i++;

}
}

问题主要是为什么 case 子句中的 PLUSMULTI 没有简单的语句 ;

如果有人想查看完整代码并且可能会发现这里的错误就是整个calculate.c 程序http://pastebin.com/WteqbmJg

最佳答案

switch() 语句中,控制被传递给匹配的 case

没有 break(或任何其他可能重定向控制的东西)的 case 将继续执行下一个“case”中的代码(包括 default 案例)。

在问题代码中,PLUS 没有声明(甚至 ; 是可选的)的原因是它“直通”到 DIV 大小写。正如 MULTI 案例落到 O_PAREN 案例一样,

所有非常合法的 C 编码。

关于没有声明和中断的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com