0

そのため、課題の質問の1つに対する単純な入力テストに失敗しています。空白で区切られた2つの整数を解析します。2つの整数は、クラスとして定義した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

コードは、少なくとも2つの明らかな方法で失敗します。

  1. スペースとは異なる空白が使用されている場合、たとえば、'\t'それはコードによって認識されません。
  2. 入力演算子は、無効な入力が与えられた場合、たとえば入力が"a b"数値ではない場合など、失敗を示しません。

従来、入力が失敗しても、valuevreadは変更されません。これは、実装にも当てはまりません。物事を修正するために、コードは実際に単純化され、プロセスを大幅に悪化させる可能性があります。これは明らかに宿題なので、コードを提供するのは適切ではないと思います。

于 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 に答える