Почему я получаю сообщение об ошибке «Исключение с плавающей точкой»?

Я пытаюсь написать код, который находит идеальные числа ниже, чем ввод пользователя.
Образец правильного вывода:

Введите положительное целое число: 100
6 идеальное число
28 — идеальное число
Нет более совершенных чисел, меньших или равных 100

Но когда я запускаю свой код, я получаю ошибку Floating point exception

и не могу понять, почему. Что я делаю неправильно?

Вот мой код:

#include <iostream>

using namespace std;

bool isAFactor(int, int);

int main(){
int x, y;
int countOut, countIn;
int userIn;
int perfect = 0;

cout << "Enter a positive integer: ";
cin >> userIn;

for(countOut = 0; countOut < userIn; countOut++){
for(countIn = 1; countIn <= countOut; countIn++){
if(isAFactor(countOut, countIn) == true){
countOut = countOut + perfect;
}
}

if(perfect == countOut){
cout << perfect << " is a perfect number" << endl;
}

perfect++;
}

cout << "There are no more perfect numbers less than or equal to " << userIn << endl;

return 0;
}bool isAFactor(int inner, int outer){
if(outer % inner == 0){
return true;
}

else{
return false;
}
}

0

Решение

Чтобы уточнить комментарий @Aki Suihkonen, при выполнении:
outer % inner
Если inner ноль, вы получите делить на ноль ошибка.

Это можно отследить, вызвав isAFactor(0, 1),
Это в вашем for зациклиться main,

Первый параметр для isAFactor(countOut, countIn) назначается в самой внешней for цикл:
for (countOut = 0; ...

Обратите внимание на значение, которое вы инициализируете countOut с.

Изменить 1:

Change your `isAFactor` function to:

if (inner == 0)
{
cerr << "Divide by zero.\n";
cerr.flush();
return 0;
}
if (outer % inner ...

Поместите точку останова в любой cerr строка выше.
Когда выполнение останавливается там, посмотрите на Трассировки стека. Хороший отладчик также позволит вам исследовать параметр / значения в каждой точке трассы.

0

Другие решения

Аргументы просто поменялись местами. Вы вызываете функцию как isAFactor(countOut, countIn) когда вы должны звонить с isAFactor(countIn, countOut)

1

По вопросам рекламы [email protected]