超出 int 的值范围后的无限循环



我已经编程了一个十进制到二进制转换器,并使用了数据类型无符号长整型。 此外,我有一个 while 循环,以便我可以在转换后再次转换一个数字。如果我超过无符号长整整的内部值范围,为什么会出现无限循环?

我的猜测是,如果出现错误,循环没有条件该怎么做,因此保持布尔值为真。

我怎样才能发现这样的错误?


这是包含循环的函数

#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;
}
}
}

如果用户想要继续转换数字,您只需添加一个 litte 检查。问题是您在检查从未更改的变量main()while循环。使用类似这样的东西:

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

PS:如果您启用了编译器警告,那么您一定是代码出了什么问题。

最新更新