Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载输入运算符未能通过自动简单输入测试_C++_Operator Overloading - Fatal编程技术网

C++ 重载输入运算符未能通过自动简单输入测试

C++ 重载输入运算符未能通过自动简单输入测试,c++,operator-overloading,C++,Operator Overloading,所以我的一个作业问题的简单输入测试失败了。我要分析两个被空格分隔的整数。这两个整数用于我定义为类的Rationalnumber类型的私有成员num和denom。这段代码中是否有明显的非常规内容?这段代码适用于我的所有测试 std::istream &operator>>( std::istream &is, Rationalnumber &r ) { Rationalnumber::in++; // increment counter

所以我的一个作业问题的简单输入测试失败了。我要分析两个被空格分隔的整数。这两个整数用于我定义为类的Rationalnumber类型的私有成员num和denom。这段代码中是否有明显的非常规内容?这段代码适用于我的所有测试

std::istream &operator>>( std::istream &is, Rationalnumber &r ) {   
    Rationalnumber::in++;   // increment counter

    // get the num
    string n;
    getline(cin,n,' ');
    stringstream ssnum(n);
    ssnum >> r.num;

    // get the denom
    string d;
    getline(cin,d,'\n');
    stringstream ssdenom(d);
    ssdenom >> r.denom;

    return is;
}

您的代码至少有两种明显的失败方式:

  • 如果使用的空格与空格不同,例如,
    '\t'
    ,则代码无法识别该空格
  • 当输入无效时,输入运算符不指示故障,例如,当输入是“a b”而不是数字时

  • 按照惯例,当输入失败时,valuevread保持不变。对于您的实现来说,这也是不正确的。为了解决问题,代码实际上可以简化,并在这个过程中变得更加缓慢。由于这显然是一项家庭作业,我认为提供代码并不合适。

    此代码通过了测试!:

    std::istream &operator>>( std::istream &is, Rationalnumber &r ) {   
        Rationalnumber::in++;   // increment counter
    
        int in;
        is >> in;
        r.numerator(in);
        is >> in;
        r.denominator(in);
    
        return is;
    }
    

    代码可以缩短很多,并且没有错误检查。除此之外,它失败的输入是什么?其他人似乎都没有通过测试的问题,因此没有太多关于测试测试内容的讨论。我会自己试试别的,看看是否通过。看来你是在假设第二个数字在这行的末尾。这是一个有效的假设吗?是的,我很确定…我还能做什么?也许我会让它包含一个动态向量。为什么要把它作为字符串读入并转换成一个数字(我想),而不是直接读入数字?只需一条语句即可完成:
    is>>r.num>>r.denum