Почему моя программа постоянно зацикливается? - PullRequest
3 голосов
/ 18 апреля 2011

Я студент cis221, и мне дали домашнее задание, которое я просто не могу понять ...

Код ниже - перегруженный оператор ввода для моего класса "Дробь".

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 ... Я понятия не имею, что не так...

Заранее спасибо!

1 Ответ

4 голосов
/ 18 апреля 2011
Fraction fract[4];
for (i=0; i<5; i++)

Это не хорошо. Используйте Fraction fract[5], и вы не будете перезаписывать случайную память.

...