Как проверить, переходит ли программа через хранилище типов данных? - PullRequest
0 голосов
/ 18 января 2019

Мне нужно выяснить, как управлять потоком программы, чтобы программа не аварийно завершала работу, когда пользователь вводит огромные числа. Целью программы является вычисление ряда Фибоначчи по вводу пользователя.

#include <iostream>
using namespace std;

int main() {

int n;   
cout << " Please enter number of fibonacci number series you wanna see  ";   
cin >> n;     
int num1=0;
int num2=1;
cout << num1 << " " << num2 << " ";

if(num1+num2<=32756)

for (int i=0; i<=n-1; ++i)
{
    int num2Temp=num2;
    cout << num1+num2 << " ";
    num2=num1+num2;
    num1=num2Temp;

}
else 
    cout << " TOO BIG " << endl;

return 0;
}

Я вычисляю ряд Фибоначчи, однако он не следует за оператором if и останавливает программу, поскольку она превышает 32756. Я понимаю, почему это происходит, поскольку num1 + num2 не обновляется, так что программа понимает его 0 +1, нет версий обновления для каждого цикла. Но у меня нет конкретной идеи, чтобы исправить программу.

1 Ответ

0 голосов
/ 18 января 2019

Вы проверяете сумму только один раз, до начала цикла.

Возможно, вы захотите проверить внутри цикла и выйти из него, если сумма превышает 32756:

for (int i = 0; i < n; i++)
{
    if (num1 + num2 <= 32756)
    {
        int num2Temp = num2;
        num2 += num1;
        num1 = num2Temp;
        cout << num2 << " ";
    }
    else
    { 
        cout << " TOO BIG " << endl;
        break;
    }
}
...