很早以前写的逆波兰式运算程序,在执行期间发现了Windows Shell对乘号处理的问题,主要表现为将“ * ”给解读为当前文件夹下所有文件名,详述如下。
代码十分简单,逆波兰计算式算法本身也没有什么难点。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXSIZE 100
#define DEBUG
double stack[MAXSIZE]; //栈
int top = 0;
double push(double x) //压栈
{
if(top == MAXSIZE)
return -1;
stack[top ++] = x;
return 0;
}
double pop() //出栈
{
return stack[--top];
}
int main(int argc,char* argv[])
{
int i;
for(i = 1;i <= argc - 1;i ++)
{
if(isdigit( *argv[i] )) //若是数字则压栈
push(atof(argv[i]));
else
{
switch(*argv[i])
{
case '+' :
{
push(pop() + pop());
break;
}
case '-' :
{
double x1 = pop(),x2 = pop();
push(x2 - x1);

本文探讨了Windows Shell如何将乘号(*)解释为当前目录下的文件名,导致程序处理乘号时出现错误。提出了使用转义符、单引号或双引号作为解决方案,其中使用单引号('*')能够成功转义。建议在输入逆波兰表达式时,考虑将*替换为替代字符,或者在程序中进行特殊处理。
最低0.47元/天 解锁文章
5444

被折叠的 条评论
为什么被折叠?



