Выявление "жучка" № 1...130

We use cookies. Read the Privacy and Cookie Policy

Очень сложно разобраться, в чём именно проблема, по столь неинформативному сообщению. Но в некоторых операционных системах попроще вы получите сообщение ( поверьте на слово ), в котором будет туманный намёк относительно деления на нуль. Впрочем, мы и сами можем догадаться о том, что проблема где-то рядом, поскольку ошибка произошла после того, как мы ввели отрицательное число, но до того, как на экран был выведен результат. Давайте ещё раз посмотрим на так и не выполнившуюся инструкцию:

    cout << "Среднее равно: "

            << nSum / nNums

            << endl ;

«Кстати говоря, хотя это и единственное деление, использованное нами в программе, это ещё не означает, что ошибка именно в нём. Компилятор может сгенерировать команду деления в результате обработки некоторой иной инструкции, написанной программистом. Кроме того, делений хватает и в стандартной библиотеке С++.»

[Советы]

Давайте посмотрим, чему равно значение nNums перед выполнением деления, изменив код следующим образом:

    while ( true )

    {

           cout << "nNums = " << nNums << endl ;

           /* Остальная часть программы остаётся неизменной */

_________________

130 стр. Часть 2. Становимся функциональными программистами

Такое дополнение нашей программы приводит к следующему выводу на экран:

    Эта программа содержит ошибки!

    nNums = 0

    Введите следующее число: 1

    nNums = 0

    Введите следующее число: 2

    nNums = 0

    Введите следующее число: 3

    nNums = 0

    Введите следующее число:

Как видите, nNums инициализировано нулевым значением, но оно не увеличивается в процессе ввода новых чисел. Это неверно, и именно в этом состоит ошибка в программе. Очевидно, что количество введённых чисел nNums должно увеличиваться, чего можно легко достичь, заменив цикл while циклом for:

        for ( int nNums = 0 ; ; nNums++ )