2011-04-17 50 views
3

我是一個cis221的學生,我已經分配了一段作業,我根本找不到......爲什麼我的程序不斷循環?

下面的代碼是我的「Fraction」類的重載輸入運算符。

istream& operator>>(istream& in, Fraction& fract) 
{ 
    cout << "Enter the whole number part for the fraction "; 
    in >> fract.Whole; 
    cout << "Enter the Numerator "; 
    in >> fract.Numerator; 
    cout << "Enter a Denominator "; 
    in >> fract.Denominator; 
    try 
    { 
     if (fract.Denominator == 0) 
      throw(FractionException(fract, "Deno input was 0, setting to 1")); 
    } 
    catch(FractionException e) 
    { 
     fract.Denominator = 1; 
     e.DisplayMessage(); 
    } 
    fract.reduceFraction(); 
    return in; 
} 

這在main中被調用。

void main() 
{ 
    //Declarations 
    srand((unsigned)time(NULL)); 
    int i = 0; 
    Fraction fract[4]; 
    for (i=0; i<5; i++) 
    { 
     cin >> fract[i]; 
    } 
    for (i=0; i<5; i++) 
    { 
     cout << fract[i]; 
    } 
} 

從我的理解,這段代碼應該完美執行;但是,代碼不斷循環。即使從不拋出異常也是如此。

我把手錶上的閉環控制VAR「i」和字面上看着它從0數到4 ...我不知道什麼是錯的...提前

謝謝!

+0

你100%肯定這是你的實際代碼?你正在使用哪種編譯器?我問,因爲我會期待一個編譯時錯誤,因爲你的main()返回void而不是int。 – razlebe 2011-04-18 00:07:46

+0

我知道大多數人返回int,但微軟2010讓我返回void – 2011-04-18 00:13:17

+0

不夠公平。但是[最好是迴歸int的習慣](http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.3) – razlebe 2011-04-18 00:20:07

回答

4
Fraction fract[4]; 
for (i=0; i<5; i++) 

這沒什麼用。使用Fraction fract[5],你不會覆蓋隨機存儲器。

+0

現在這很奇怪......我可以發誓,它只會循環4次...嗯,這是我的愚蠢:) – 2011-04-18 00:14:51

+0

哇,我現在覺得真的很愚蠢...... – 2011-04-18 00:16:29

+0

+1老鷹的眼睛。 :) – razlebe 2011-04-18 00:16:32