同样的程序,在windows xp 和 windows2000下输出结果不一样!该怎么处理
同样的程序,在windows xp 和 windows2000下输出结果不一样!
同样的程序,在windows xp 和 windows2000下输出结果不一样!
不知道哪个高手能帮我解决这个问题.
以下的代码,输入:
*(+(a,b),-(c,/(e,f)))
在windows xp下可以正确输出:(a+b)*(c-e/f)
在windows 2000 下输出:((a)+b)*((c)-(e)/f) ,多了很多括号.
把xp编译好的程序copy到2000下,同样多了这些括号,所以应该不是编译器的原因.
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct node
{
struct node *left,*right;
char op;
}NODE,*TREE;
int compare(char op1,char op2)
{
int l1,l2;
switch(op1)
{
case '- ':
case '+ ':l1=1;
break;
case '* ':
case '/ ':l1=2;
break;
}
switch(op2)
{
case '- ':
case '+ ':l2=1;
break;
case '* ':
case '/ ':l2=2;
break;
}
if(l1> l2)
return 1;
else if(l1==l2)
return 0;
else
return -1;
}
void printext(TREE t)
{
int brack;
if(t-> left)
{
brack=(compare(t-> op,t-> left-> op)==1);
if(brack)
printf( "( ");
printext(t-> left);
if(brack)
printf( ") ");
}
printf( "%c ",t-> op);
if(t-> right)
{
brack=(compare(t-> op,t-> right-> op)!=-1);
if(brack)
printf( "( ");
printext(t-> right);
if(brack)
同样的程序,在windows xp 和 windows2000下输出结果不一样!
不知道哪个高手能帮我解决这个问题.
以下的代码,输入:
*(+(a,b),-(c,/(e,f)))
在windows xp下可以正确输出:(a+b)*(c-e/f)
在windows 2000 下输出:((a)+b)*((c)-(e)/f) ,多了很多括号.
把xp编译好的程序copy到2000下,同样多了这些括号,所以应该不是编译器的原因.
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct node
{
struct node *left,*right;
char op;
}NODE,*TREE;
int compare(char op1,char op2)
{
int l1,l2;
switch(op1)
{
case '- ':
case '+ ':l1=1;
break;
case '* ':
case '/ ':l1=2;
break;
}
switch(op2)
{
case '- ':
case '+ ':l2=1;
break;
case '* ':
case '/ ':l2=2;
break;
}
if(l1> l2)
return 1;
else if(l1==l2)
return 0;
else
return -1;
}
void printext(TREE t)
{
int brack;
if(t-> left)
{
brack=(compare(t-> op,t-> left-> op)==1);
if(brack)
printf( "( ");
printext(t-> left);
if(brack)
printf( ") ");
}
printf( "%c ",t-> op);
if(t-> right)
{
brack=(compare(t-> op,t-> right-> op)!=-1);
if(brack)
printf( "( ");
printext(t-> right);
if(brack)