Проблема с функциями, отображающими выходные и входные данные

#c

#c

Вопрос:

Мне нужно написать программу, которая получит 2 целых числа. Затем программа отобразит следующее: a. Сумма всех целых чисел, которые делятся на 4 и 6 между двумя введенными числами. b. Среднее значение всех целых чисел, которые делятся на 3 и 7 между двумя введенными числами.

Я попытался выполнить приведенный ниже код:

 #include <iostream>
using namespace std;

int Sum46(int a, int b)
{
    int sum = 0;
    for (int i = a; i <= b; i  ) {
        if (i % 4 == 0 amp;amp; i % 6 == 0) {
            sum = sum   i;
        }
    }
    return sum;
}

int Sum37(int j, int k)
{
    int sum1 = 0;
    for (int i = j; i <= k; i  ) {
        if (i % 3 == 0 amp;amp; i % 7 == 0) {

            sum1 = sum1   i;
        }
    }
    return sum1;
}

int Count(int f, int g)
{
    int inputCount = 0;
    for (int i = f; i < g; i  ) {
        if (i % 3 == 0 amp;amp; i % 7 == 0) {
            inputCount  ;
        }
    }
    return inputCount;
}

int Ave(int t, int u)
{
    int total = 0;
    total = t / u;
    return total;
}

void display(int o, int l)
{
    cout << "The sum of all integers that are both divisible by 4 and 6 between two numbers is " << o << endl;
    cout << "The sum of all integers that are both divisible by 3 and 7 between two numbers is " << l << endl;
}

int main()
{
    int num1, num2;
    int probA, probB, comp, bilang;
    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;

    probA = Sum46(num1, num2);
    comp = Sum37(num1, num2);
    bilang = Count(num1, num2);
    probB = Ave(comp, bilang);
    display(probA, probB);

    return 0;
}
  

Мой ожидаемый результат должен быть

Введите первое число: 4 Введите второе число: 12

Сумма всех целых чисел, которые оба делятся на 4 и 6 между двумя числами, равна 12 Сумма всех целых чисел, которые оба делятся на 3 и 7 между двумя числами, равна 0 «поскольку 12 — это единственное число, которое делится на 4 и 6, и ни одно число не делится на 3 и 7для введенных чисел «.

Но фактические результаты — это ввод первого числа: 4 Ввод второго числа: 12 «Это единственный результат, и я не смог создать какой-либо вывод функций»

Комментарии:

1. Если Count() возвращает 0 , вы получаете исключение деления на ноль.

2. При отладке в Visual Studio это показало мне, что @JohnnyMopp был правильным. в функции ave() оба параметра равны 0.

Ответ №1:

Вы должны проверить случай, когда u равно 0.

Измените это:

 int Ave(int t, int u)
{
    int total = 0;
    total = t / u;
    return total;
}
  

К этому:

 int Ave(int t, int u)
{
    if( u == 0 )
        return -1;
    return t/u;
}
  

Комментарии:

1. возвращает значение -1

2. -1 — это код ошибки по умолчанию для библиотек C . Вы можете вернуть то, что хотите. Может быть, 0 здесь лучше. Но вам определенно нужно перехватить деление через 0. Например, вы могли бы создать исключение с разделением на 0. Но это строка, в которой ваш код прерывается.

3. Я вижу, спасибо за информацию. Кстати, как я могу вернуть функцию Ave в моей функции отображения?

4. Возможно, вы захотите не отображать функцию. Вместо этого просто отобразите свои результаты непосредственно в main. Либо это, либо передача дополнительных параметров.