Skip to content

第六章 第四节逆波兰计算器示例代码错误 #49

@gaomei052

Description

@gaomei052

原代码
{ for(i=1;i<=NF;i++){ if($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+$)/){ stack[++top] = $i continue }else if($i == "+" && top > 1){ stack[top-1] += stack[top];top-- }else if($i == "-" && top >1){ stack[top-1] -= stack[top] top-- }else if($i == "*" && top > 1){ stack[top-1] *= stack[top];top-- }else if($i == "/" && top > 1){ stack[top-1] /= stack[top];top-- }else if($i == "^" && top > 1){ stack[top-1] ^= stack[top];top-- }else{ printf("error: cannot evaluate %s\n",$i) top = 0 next } if(top == 1){ printf("\t%.8g\n",stack[top--]) }else if(top > 1){ printf("error: too many operands\n") top = 0 } } }
更改后的代码
{ top = 0 for(i=1;i<=NF;i++){ if($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+$)/){ stack[++top] = $i continue }else if($i == "+" && top > 1){ stack[top-1] += stack[top];top-- }else if($i == "-" && top >1){ stack[top-1] -= stack[top] top-- }else if($i == "*" && top > 1){ stack[top-1] *= stack[top];top-- }else if($i == "/" && top > 1){ stack[top-1] /= stack[top];top-- }else if($i == "^" && top > 1){ stack[top-1] ^= stack[top];top-- }else{ printf("error: cannot evaluate %s\n",$i) top = 0 next } if(top == 1 && i == NF){ printf("\t%.8g\n",stack[top]) }else if(top > 1 && i == NF){ printf("error: too many operands\n") top = 0 } } }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions