注意到我正在处理的一个程序中的错误,提取了代码,基本上就是这样。
它与带符号的 int 进行无符号比较并导致无限循环:
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000)
{
printf("%o\n", i);
++i;
}
return 0;
}
我试着用这个代替:
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000u)
{
printf("%o\n", i);
++i;
}
return 0;
}
我认为这会修复有符号/无符号比较,但事实并非如此,它仍然陷入无限循环。所以我也尝试将它转换为 unsigned int,没有骰子,仍然是无限循环。
使用Visual Studio 2015,全面优化,发布编译。
最佳答案
虽然我无法在 Win7 或 Ubuntu(均为 64 位)上重现无限循环,但我认为问题在于您的 printf() 函数具有无符号八进制数表示,这让您认为它进入了无限循环。将 %o
参数更改为 %u
可能会澄清问题。
关于C++无符号无限循环比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069686/