0

所以我没有通过一个作业问题的简单输入测试。我要解析两个由空格分隔的整数。这两个整数用于我定义为类的 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;
}
4

2 回答 2

1

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

  1. 如果使用了与空格不同的空格,例如 ,'\t'您的代码将无法识别它。
  2. 当输入无效时,输入运算符不会指示失败,例如,当输入是"a b"而不是数字时。

按照惯例,当输入失败时,值 vread 保持不变。这也不适用于您的实施。为了解决问题,实际上可以简化代码,并且在此过程中变得更加繁琐。由于这显然是一项家庭作业,但我认为提供代码是不合适的。

于 2012-11-19T07:19:10.987 回答
0

这段代码通过了测试!:

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;
}
于 2012-11-19T18:54:52.920 回答