none
release 和 debug RRS feed

  • 问题

  •  

    我作了一个小程序,在debug下没有问题,但是在release下程序就会错误的结果。各位大哥帮帮我啊!

     

    主要的功能是输入一个表达式,输出结果。

    Code Snippet

    #define chang 100
    #include<iostream>
    using namespace std;

    int checkdate(char &c)
    {
     switch (c)
     {
     case '1':return 1;
     case '2':return 2;
     case '3':return 3;
     case '4':return 4;
     case '5':return 5;
     case '6':return 6;
     case '7':return 7;
     case '8':return 8;
     case '9':return 9;
     case '0':return 0;
     case '+':;
     case '-':;
     case '*':;
     case '/':return 10;
     case '(':return 11;
     case ')':return 12;
     }
    }

    //类用于处理不带括号的四则运算
    class neihe
    {
    public:
     double shuzi[chang];
     char fuhao[chang];
     double qiuzhi(void);
     neihe(void);
    };

    //初始化类的成员变量
    neihe::neihe(void)
    {
      int i;
      for(i=1;i<chang;i+=2)
       shuzi[i]=1;
      for(i=2;i<chang;i+=2)
       fuhao[i]='*';
    }
    //计算不带括号的表达式的值
    double neihe::qiuzhi(void)
    {
      double sum=0;
      int n;
      for(n=2;n<chang;n+=2)
      {
       if(fuhao[n]=='*')
       {
        shuzi[n+1]=shuzi[n+1]*shuzi[n-1];
        shuzi[n-1]=0;
        fuhao[n]='+';
       }
       if(fuhao[n]=='/')
       {
        shuzi[n+1]=shuzi[n-1]/shuzi[n+1];
        shuzi[n-1]=0;
        fuhao[n]='+';
       }
      }
      for(n=2;n<chang;n+=2)
      {
       if(fuhao[n]=='-')
       {
        shuzi[n+1]=0-shuzi[n+1];
        fuhao[n]='+';
       }
      }
      for(n=1;n<chang;n+=2)
       sum=sum+shuzi[n];
     
      for(n=1;n<chang;n+=2)
       shuzi[n]=1;
      for(n=2;n<chang;n+=2)
       fuhao[n]='*';
      return sum;
     }

    //本函数处理带括号的表达式
    void start(void)
    { int i;
     double shuzi[chang];
     char fuhao[chang];
     neihe temp[chang/10];
     for(i=0;i<chang;i++)
     {
      shuzi[i]=0;
      fuhao[i]=char(0);
     }

     

     char zifu[chang];
     
     for(i=1;i<chang;i++)
     {
      cin>>zifu[i];
      if(zifu[i]=='=') break;
     }

     int tt=i;
     int c[chang];
     for(i=1;i<tt;i++)
      c[i]=checkdate(zifu[i]);
     int t[chang];
     int m=1;
     for(i=1;i<tt;i++)
     {
      if(c[i]<=9&&c[i]>=0)
      {
       for(;1;i++)
       {
        if(c[i]<=9&&c[i]>=0)
         shuzi[m]=c[i]+shuzi[m]*10;
        else
        {
         t[m]=1;
         m++;
         break;
        }
       }
      }
      if(c[i]==10) {t[m]=2;fuhao[m]=zifu[i];m++;}
      if(c[i]==11) {t[m]=3;m++;}
      if(c[i]==12) {t[m]=4;m++;}
     }

     tt=m;
     int n=0;
     int q=0;
     int k=1;
     m=0;
     for (i=1;i<tt;i++)
     {
      if(t[i]==1)
      {temp[q].shuzi[k]=shuzi[i];k++;}
      if(t[i]==2)
      {temp[q].fuhao[k]=fuhao[i];k++;}
      if(t[i]==3)
      {q++;}
      if(t[i]==4)
      {temp[q-1].shuzi[k-1]=temp[q].qiuzhi();q--;}
     }


     cout<<"计算结果是:"<<temp[0].qiuzhi()<<endl;

    }

    int main(void)

     cout<<"请输入一个表达式(整数、+、-、*、/、(、))"<<endl;
     cout<<"以“=”结束"<<endl;
     start();
     cout<<endl<<"请输入表达式: "<<endl;

     while(1)
     {
      start();
      cout<<endl<<"输入表达式: "<<endl;
     }
     
     return 0;
    }

     

     

    vista 家庭高级版 vs2008

    2008年5月1日 6:05

答案

  • #define chang 100
    #include<iostream>
    using namespace std;

    int checkdate(char &c)
    {
     switch (c)
     {
     case '1':return 1;
     case '2':return 2;
     case '3':return 3;
     case '4':return 4;
     case '5':return 5;
     case '6':return 6;
     case '7':return 7;
     case '8':return 8;
     case '9':return 9;
     case '0':return 0;
     case '+':;
     case '-':;
     case '*':;
     case '/':return 10;
     case '(':return 11;
     case ')':return 12;
     }
    }

     

    在switch语句中最好有个缺省分支default,在每个分支语句的结尾最好用break;,因为异常可能就出在这样容易忽略的地方

    2008年5月4日 1:59
    版主