2012-11-19 24 views
0

所以我沒有一個簡單的輸入測試的分配問題之一。我將解析由空格分隔的兩個整數。兩個整數在我已經定義爲一類的有理數類型的私有成員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; 
} 
+0

的代碼可以縮短不少,也沒有錯誤檢查。除此之外,它失敗的意見是什麼? –

+0

其他人似乎沒有通過測試的問題,所以沒有太多的討論什麼測試測試。我會親自嘗試一下,看看它是否會通過。 – jyim

+0

看來你是假設第二個數字來在該行的末尾。這是一個有效的假設嗎? –

回答

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; 
} 
1

你的代碼失敗的,至少,兩個明顯的方式:

  1. 如果使用的是不同的空白空間相比,例如,'\t',它不是由你的代碼的認可。
  2. 輸入操作者不表示失敗時它被賦予無效的輸入,例如,當輸入是"a b"而不是數字。

傳統上,當輸入失敗時,valuevread保持不變。這對你的實現也不適用。爲了解決這個問題,實際上可以簡化代碼,並且在這個過程中做出很多事情。由於這顯然是一項家庭作業,我認爲提供代碼並不合適。