同样的程序,在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)