写了个简易计算器,发现一旦在调试器输入英文括号就没办法运行,但输入中文括号可以。代码的选择条件是英文括号,也有试过把中英文括号都纳入选择条件,但是英文的就是不行。想问一下这是为什么呀?
//设置优先级
void SetOperator()
{
a['+'] = add;
a['-'] = add;
a['*'] = multiple;
a['/'] = multiple;
a['('] = left_bracket;
}
//第二段部分代码
if (c == ')' )//2,当前字符为右括号->连续弹出直到遇见左括号
{
while (!oper.empty() && oper.top() != '(' )
{
Run(oper, dig);
}
if (oper.empty())throw"Error";
oper.pop();//左括号出栈
}
else if (isOperator(c))//3,当前字符为操作符->弹栈计算后再入栈或直接入栈
{
//前一个运算符不是左括号、当前运算符优先级更小->先进行一次运算
if(!oper.empty()&&oper.top() != '('&&a[c]<=a[oper.top()])
{
Run(oper, dig);
}
oper.push(c);//入栈
}
}//二
i++;
}//while
说反了吧,你的代码里应该认的是英文的括号。
如果要同时中英文,可以两个思路,一个是输入的时候遇到中文,自动替换成英文
一个是判断 if (c == ')' ) 这里改为 if (c == ')' || c ==')') 别的类似
先前发布三子棋和扫雷,有朋友私信说不知道在VS中如何将不同文件的函数整合,我认为朋友使用的是vc6.0或dvc++,或者没有在较复杂的工程中分类分文件的习惯。这是扫雷链接 扫雷C语言实现
文章中我分了三个文件来编程