当前位置: 代码迷 >> C语言 >> 使用switch来进行运算符优先级判定的问题
  详细解决方案

使用switch来进行运算符优先级判定的问题

热度:172   发布时间:2007-03-31 19:36:37.0
使用switch来进行运算符优先级判定的问题
int priority( char x, char y ) /*a栈顶 b当前*/
{
/*0:x>y 1:x<y 2:x=y*/
switch( x )
{
case '+':{
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 1;break;
case '/':return 1;break;
case '(':return 1;break;
case ')':return 0;break;
case '#':return 0;break;
};
};break;
case '-':{
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 1;break;
case '/':return 1;break;
case '(':return 1;break;
case ')':return 0;break;
case '#':return 0;break;
};
};break;
case '*':{
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 0;break;
case '/':return 0;break;
case '(':return 1;break;
case ')':return 0;break;
case '#':return 0;break;
};
};break;
case '/':{
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 0;break;
case '/':return 0;break;
case '(':return 1;break;
case ')':return 0;break;
case '#':return 0;break;
};
};break;
case '(':{
switch( y )
{
case '+':return 1;break;
case '-':return 1;break;
case '*':return 1;break;
case '/':return 1;break;
case '(':return 1;break;
case ')':return 2;break;
};
};break;
case ')':{
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 0;break;
case '/':return 0;break;
case ')':return 0;break;
case '#':return 0;break;
};
};break;
case '#':{
switch( y )
{
case '+':return 1;break;
case '-':return 1;break;
case '*':return 1;break;
case '/':return 1;break;
case '(':return 1;break;
case '#':return 2;break;
};
};break;
default:exit(0);break;
}
}

代码如上 目前所有的语句全部警告为“不能到达的代码”
请问是什么原因导致如此

[此贴子已经被作者于2007-3-31 19:54:29编辑过]

搜索更多相关的解决方案: 运算符  switch  

----------------解决方案--------------------------------------------------------
switch( y )
{
case '+':return 0;break;
case '-':return 0;break;
case '*':return 1;break;
case '/':return 1;break;
case '(':return 1;break;
case ')':return 0;break;
case '#':return 0;break;
};
把这个break;全部删掉,
因有了return 就结束了本函数,后面的break;根不能达到.
----------------解决方案--------------------------------------------------------
但不是错误.

优先级这样设置也太复杂了吧.操作符的优先级不会因为操作符的改变而改变,所以不需要分别判断.
----------------解决方案--------------------------------------------------------
  相关解决方案