Бесконечный l oop после превышения диапазона значений int - PullRequest
0 голосов
/ 16 июня 2020

Я запрограммировал десятичный в двоичный преобразователь и использовал тип данных unsigned long long int. Кроме того, у меня есть время l oop, чтобы я мог снова преобразовать число после преобразования. Почему я попадаю в бесконечный l oop, если выхожу за пределы диапазона значений unsigned long long int?

Я предполагаю, что l oop не имеет условия, что делать делать, если есть ошибка, и поэтому значение bool остается истинным.

И как я могу отловить такую ​​ошибку?


Вот функция, содержащая l oop

#include <iostream>
#include <windows.h>

void calculateBinary();

int main()
{
    bool programmRun = true;
    while (programmRun)
    {
        calculateBinary();
    }
}

void calculateBinary()
{
    unsigned long long int number;
    unsigned long long int binary;
    unsigned long long int division;
    unsigned long long int memory;
    unsigned long long int preDivision;
    unsigned long long int runs = 0;
    unsigned long long int* binaryArray;
    unsigned long long int runsMemory;

    bool arraySort = false;
    bool calculate = true;

    std::cout << "Number to convert: ";
    std::cin >> number;

    memory = number;

    while (calculate)
    {
        preDivision = memory / 2;
        memory = preDivision;

        runs++;

        if (preDivision == 0)
        {
            calculate = false;
            runsMemory = runs - 1;
            binaryArray = new unsigned long long int[runs];

            for (unsigned int k = 0; k < runs; k++)
            {
                binaryArray[k] = k;
            }

            for (unsigned int i = 0; i < runs; i++)
            {
                division = number / 2;
                binary = number % 2;
                number = division;
                binaryArray[runsMemory--] = binary;
            }

            std::cout << "Converted number: ";

            for (unsigned int j = 0; j < runs; j++)
            {
                std::cout << binaryArray[j];
            }

            delete[] binaryArray;
            std::cout << "\n" << std::endl;
        }
    }
}

1 Ответ

1 голос
/ 16 июня 2020

Вам просто нужно добавить небольшую проверку, если пользователь хочет продолжить преобразование чисел. Проблема заключалась в том, что ваша while l oop in main() проверяла переменную, которая никогда не изменяется. Используйте что-то вроде этого:

int main() {
    char ch = 'Y';
    while (ch == 'Y' or ch == 'y') {
        calculateBinary();
        std::cout << "\nWanna convert another number?? (Y/N) ";
        std::cin >> ch;
    }
}

PS: Если вы включили предупреждения компилятора, вы, должно быть, поняли, что не так с вашим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...