zoukankan      html  css  js  c++  java
  • 辅助判卷程序的一些小bug

    首先谈一下,double类型

    之前查过一些资料,double类型做==(相等)判断时候,会出现一些错误,及61.95与61.95不相等

    对main函数中的部分加以改正,下面的answer为string类型,cal就是计算器类的对象

    if(b){                                //用户输入为小数形式 
        if(atof(answer.c_str())==cal.result)
            b=true;
        else
            b=false; 
    }

    这段代码就是获取用户输入的小数,与计算器类小数运算结果做比较,经过验证,发现基本都不对

    if(b){                    //用户输入为小数形式 
        char buf[10];
        sprintf(buf,"%g",cal.result);
        string stemp=buf;
        if(answer==stemp)
            b=true;
        else
            b=false; 
    }     

    这是经过改正的代码,就是将实数的比较转换为字符串的比较,这样就能实现正确的功能了

    接下类是分数类的bug

    当分数为负数时候,负号会出现在分子或者分母上,这导致了显示的不统一,也使得判断相等时出现了错误

    对分数类的yuefen函数加以改正

    void yuefen(){
        int t;
        int a=fz;
        int b=fm;
        if (a < b) {
            t = a;
            a = b;
            b = t;
        }
        while (t = a % b) {
            a = b;
            b = t;
        }
        if(b!=1){
            fz/=b;
            fm/=b;
        }
    }

    这是原本的函数,负数不一定会出现在分子或者分母上,或者两者都会出现

    void yuefen(){
        int t;
        int a=fz;
        int b=fm;
        if (a < b) {
            t = a;
            a = b;
            b = t;
        }
        while (t = a % b) {
            a = b;
            b = t;
        }
        if(b!=1){
            fz/=b;
            fm/=b;
        }
        if(fm<0){
            fz=-fz;
            fm=-fm;
        }
    }    

    在结束的地方加入一个判断,即可解决问题

    还有一个bug是用户输入分数结果时候,没有读取负号,导致读取结果失败

    对main函数中的部分加以改正

    else{                                //用户输入为分数形式 
        stringstream sst(answer);
        int n1,n2;
        char c;
        sst>>n1>>c>>n2;
        if(c!='/'){
            cout<<"输入非法"<<endl; 
        }
        else{
            fenshu f(n1,n2);
            if(f==cal.fresult)
                b=true;
        else
            b=false;
        }
    }

    这是原本获取用户输入的分数结果部分

    else{                //用户输入为分数形式 
        stringstream sst(answer);
        int n1,n2;
        char c;
        if(answer[0]=='-')
            sst>>c;
        sst>>n1>>c>>n2;
        if(c!='/'){
        cout<<"输入非法"<<endl; 
        }
        else{
            if(answer[0]=='-')
                n1=-n1;
            fenshu f(n1,n2);
            if(f==cal.fresult)
                b=true;
            else
                b=false;
        }
    }    

    加入对负号的判断,以及读取,这样就能得到正确的结果了

    最后,对程序显示部分的完善

        if(b){
            cout<<"答案正确"<<endl; 
            zq++;
        }
        else{
            cout<<"答案错误"<<endl;
            cal.printfanswer();
            cw++;
        }
        cout<<endl;
    }
    cout<<"总共"<<zq+cw<<"道题,答对"<<zq<<"道,答错“<<cw<<"";

    将main函数结尾部分(in.close()之前)改成上述样子,并且,在开头定义变量int zq=0,cw=0;

    这样就可以在完成全部题目后,显示具体信息

  • 相关阅读:
    Codeforces Round #324 (Div. 2) D. Dima and Lisa 哥德巴赫猜想
    Codeforces Round #324 (Div. 2) C. Marina and Vasya 贪心
    Codeforces Round #324 (Div. 2) B. Kolya and Tanya 快速幂
    Codeforces Round #324 (Div. 2) A. Olesya and Rodion 水题
    使用spring-loaded实现应用热部署
    maven中properties标签定义变量
    java中的匿名内部类总结
    泛型类型限定和通配符类型限定
    基于ActiveMQ的Topic的数据同步——消费者持久化
    基于ActiveMQ的Topic的数据同步——初步实现
  • 原文地址:https://www.cnblogs.com/chengyu404/p/5269443.html
Copyright © 2011-2022 走看看